From 28b9aab74a72127d29dda8214941f37c97f34304 Mon Sep 17 00:00:00 2001
From: nick863 <30440255+nick863@users.noreply.github.com>
Date: Fri, 22 Nov 2024 13:37:16 -0800
Subject: [PATCH 01/18] Add first draft
---
.../Custom/Agent/AzureFunctionDefinition.cs | 49 ++++++
.../src/Generated/AIProjectsModelFactory.cs | 4 +-
.../Azure.AI.Projects/src/Generated/Agent.cs | 6 +-
.../Generated/AgentsNamedToolChoiceType.cs | 4 +-
.../AzureFunctionBinding.Serialization.cs | 133 +++++++++++++++
.../src/Generated/AzureFunctionBinding.cs | 69 ++++++++
.../AzureFunctionDefinition.Serialization.cs | 158 ++++++++++++++++++
.../src/Generated/AzureFunctionDefinition.cs | 86 ++++++++++
...AzureFunctionStorageQueue.Serialization.cs | 150 +++++++++++++++++
.../Generated/AzureFunctionStorageQueue.cs | 82 +++++++++
...ureFunctionToolDefinition.Serialization.cs | 134 +++++++++++++++
.../Generated/AzureFunctionToolDefinition.cs | 44 +++++
.../AzureStorageQueueBinding.Serialization.cs | 134 +++++++++++++++
.../src/Generated/AzureStorageQueueBinding.cs | 44 +++++
.../Generated/CodeInterpreterToolResource.cs | 4 +-
.../src/Generated/CreateAgentRequest.cs | 4 +-
.../src/Generated/CreateRunRequest.cs | 4 +-
.../Generated/CreateThreadAndRunRequest.cs | 4 +-
.../src/Generated/FileSearchToolResource.cs | 12 +-
...osoftFabricToolDefinition.Serialization.cs | 12 +-
.../MicrosoftFabricToolDefinition.cs | 20 +--
.../src/Generated/RequiredToolCall.cs | 2 +-
...epMicrosoftFabricToolCall.Serialization.cs | 10 +-
.../RunStepMicrosoftFabricToolCall.cs | 2 +-
.../RunStepToolCall.Serialization.cs | 2 +-
.../src/Generated/RunStepToolCall.cs | 2 +-
.../src/Generated/RunStepToolCallDetails.cs | 6 +-
.../src/Generated/ThreadRun.cs | 6 +-
.../src/Generated/ToolConnectionList.cs | 2 +-
.../Generated/ToolDefinition.Serialization.cs | 3 +-
.../src/Generated/ToolDefinition.cs | 2 +-
.../src/Generated/ToolResources.cs | 4 +-
...knownAzureFunctionBinding.Serialization.cs | 126 ++++++++++++++
.../Generated/UnknownAzureFunctionBinding.cs | 28 ++++
.../src/Generated/UpdateAgentRequest.cs | 4 +-
.../src/Generated/VectorStoreFileError.cs | 2 +-
.../tests/AIProjectsTestEnvironment.cs | 1 +
sdk/ai/Azure.AI.Projects/tsp-location.yaml | 2 +-
38 files changed, 1300 insertions(+), 61 deletions(-)
create mode 100644 sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionDefinition.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionBinding.Serialization.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionBinding.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.Serialization.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionStorageQueue.Serialization.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionStorageQueue.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.Serialization.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureStorageQueueBinding.Serialization.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/AzureStorageQueueBinding.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/UnknownAzureFunctionBinding.Serialization.cs
create mode 100644 sdk/ai/Azure.AI.Projects/src/Generated/UnknownAzureFunctionBinding.cs
diff --git a/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionDefinition.cs b/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionDefinition.cs
new file mode 100644
index 0000000000000..0eaf15d633719
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionDefinition.cs
@@ -0,0 +1,49 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using Azure.Core;
+
+namespace Azure.AI.Projects
+{
+ [CodeGenSuppress("AzureFunctionDefinition", typeof(InternalFunctionDefinition))]
+ public partial class AzureFunctionDefinition
+ {
+ ///
+ public string Name => InternalFunction.Name;
+
+ ///
+ public string Description => InternalFunction.Description;
+
+ ///
+ public BinaryData Parameters => InternalFunction.Parameters;
+
+ /// The definition of the function that the function tool should call.
+ internal InternalFunctionDefinition InternalFunction { get; set; }
+
+ ///
+ /// Initializes a new instance of AzureFunctionDefinition.
+ ///
+ /// The name of the Azure function to be called.
+ /// A description of what the Azure function does, used by the model to choose when and how to call the function.
+ /// Input storage queue.
+ /// Output storage queue.
+ /// The parameters the Azure functions accepts, described as a JSON Schema object.
+ /// , or is null.
+ public AzureFunctionDefinition(string name, string description, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding, BinaryData parameters)
+ : this(new InternalFunctionDefinition(name, description, parameters, serializedAdditionalRawData: null), inputBinding: inputBinding, outputBinding: outputBinding)
+ {
+ }
+
+ ///
+ public override bool Equals(object obj)
+ => (obj is AzureFunctionDefinition toolDefinition && Name == toolDefinition.Name);
+
+ ///
+ public override int GetHashCode() => InternalFunction.GetHashCode();
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AIProjectsModelFactory.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AIProjectsModelFactory.cs
index ca30fab8a0366..ffc91302e1c5e 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/AIProjectsModelFactory.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AIProjectsModelFactory.cs
@@ -253,7 +253,7 @@ public static RunStepMessageCreationReference RunStepMessageCreationReference(st
///
/// A list of tool call details for this run step.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , and .
///
/// A new instance for mocking.
public static RunStepToolCallDetails RunStepToolCallDetails(IEnumerable toolCalls = null)
@@ -348,7 +348,7 @@ public static RunStepMicrosoftFabricToolCall RunStepMicrosoftFabricToolCall(stri
{
microsoftFabric ??= new Dictionary();
- return new RunStepMicrosoftFabricToolCall("microsoft_fabric", id, serializedAdditionalRawData: null, microsoftFabric);
+ return new RunStepMicrosoftFabricToolCall("fabric_aiskill", id, serializedAdditionalRawData: null, microsoftFabric);
}
/// Initializes a new instance of .
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/Agent.cs b/sdk/ai/Azure.AI.Projects/src/Generated/Agent.cs
index 51f05f61a7b8c..ea5ad0df0decc 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/Agent.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/Agent.cs
@@ -56,7 +56,7 @@ public partial class Agent
///
/// The collection of tools enabled for the agent.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
///
/// A set of resources that are used by the agent's tools. The resources are specific to the type of tool. For example, the `code_interpreter`
@@ -104,7 +104,7 @@ internal Agent(string id, DateTimeOffset createdAt, string name, string descript
///
/// The collection of tools enabled for the agent.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
///
/// A set of resources that are used by the agent's tools. The resources are specific to the type of tool. For example, the `code_interpreter`
@@ -162,7 +162,7 @@ internal Agent()
///
/// The collection of tools enabled for the agent.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
public IReadOnlyList Tools { get; }
///
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AgentsNamedToolChoiceType.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AgentsNamedToolChoiceType.cs
index 1fce40ad472d6..e9371e9da0586 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/AgentsNamedToolChoiceType.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AgentsNamedToolChoiceType.cs
@@ -26,7 +26,7 @@ public AgentsNamedToolChoiceType(string value)
private const string CodeInterpreterValue = "code_interpreter";
private const string FileSearchValue = "file_search";
private const string BingGroundingValue = "bing_grounding";
- private const string MicrosoftFabricValue = "microsoft_fabric";
+ private const string MicrosoftFabricValue = "fabric_aiskill";
private const string SharepointValue = "sharepoint_grounding";
private const string AzureAISearchValue = "azure_ai_search";
@@ -38,7 +38,7 @@ public AgentsNamedToolChoiceType(string value)
public static AgentsNamedToolChoiceType FileSearch { get; } = new AgentsNamedToolChoiceType(FileSearchValue);
/// Tool type `bing_grounding`.
public static AgentsNamedToolChoiceType BingGrounding { get; } = new AgentsNamedToolChoiceType(BingGroundingValue);
- /// Tool type `microsoft_fabric`.
+ /// Tool type `fabric_aiskill`.
public static AgentsNamedToolChoiceType MicrosoftFabric { get; } = new AgentsNamedToolChoiceType(MicrosoftFabricValue);
/// Tool type `sharepoint_grounding`.
public static AgentsNamedToolChoiceType Sharepoint { get; } = new AgentsNamedToolChoiceType(SharepointValue);
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionBinding.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionBinding.Serialization.cs
new file mode 100644
index 0000000000000..a9ce253d16993
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionBinding.Serialization.cs
@@ -0,0 +1,133 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.ClientModel.Primitives;
+using System.Text.Json;
+using Azure.Core;
+
+namespace Azure.AI.Projects
+{
+ [PersistableModelProxy(typeof(UnknownAzureFunctionBinding))]
+ public partial class AzureFunctionBinding : IUtf8JsonSerializable, IJsonModel
+ {
+ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IJsonModel)this).Write(writer, ModelSerializationExtensions.WireOptions);
+
+ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ writer.WriteStartObject();
+ JsonModelWriteCore(writer, options);
+ writer.WriteEndObject();
+ }
+
+ /// The JSON writer.
+ /// The client options for reading and writing models.
+ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionBinding)} does not support writing '{format}' format.");
+ }
+
+ writer.WritePropertyName("type"u8);
+ writer.WriteStringValue(Type);
+ if (options.Format != "W" && _serializedAdditionalRawData != null)
+ {
+ foreach (var item in _serializedAdditionalRawData)
+ {
+ writer.WritePropertyName(item.Key);
+#if NET6_0_OR_GREATER
+ writer.WriteRawValue(item.Value);
+#else
+ using (JsonDocument document = JsonDocument.Parse(item.Value))
+ {
+ JsonSerializer.Serialize(writer, document.RootElement);
+ }
+#endif
+ }
+ }
+ }
+
+ AzureFunctionBinding IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionBinding)} does not support reading '{format}' format.");
+ }
+
+ using JsonDocument document = JsonDocument.ParseValue(ref reader);
+ return DeserializeAzureFunctionBinding(document.RootElement, options);
+ }
+
+ internal static AzureFunctionBinding DeserializeAzureFunctionBinding(JsonElement element, ModelReaderWriterOptions options = null)
+ {
+ options ??= ModelSerializationExtensions.WireOptions;
+
+ if (element.ValueKind == JsonValueKind.Null)
+ {
+ return null;
+ }
+ if (element.TryGetProperty("type", out JsonElement discriminator))
+ {
+ switch (discriminator.GetString())
+ {
+ case "storage_queue": return AzureStorageQueueBinding.DeserializeAzureStorageQueueBinding(element, options);
+ }
+ }
+ return UnknownAzureFunctionBinding.DeserializeUnknownAzureFunctionBinding(element, options);
+ }
+
+ BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ return ModelReaderWriter.Write(this, options);
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionBinding)} does not support writing '{options.Format}' format.");
+ }
+ }
+
+ AzureFunctionBinding IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ {
+ using JsonDocument document = JsonDocument.Parse(data);
+ return DeserializeAzureFunctionBinding(document.RootElement, options);
+ }
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionBinding)} does not support reading '{options.Format}' format.");
+ }
+ }
+
+ string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// Deserializes the model from a raw response.
+ /// The response to deserialize the model from.
+ internal static AzureFunctionBinding FromResponse(Response response)
+ {
+ using var document = JsonDocument.Parse(response.Content);
+ return DeserializeAzureFunctionBinding(document.RootElement);
+ }
+
+ /// Convert into a .
+ internal virtual RequestContent ToRequestContent()
+ {
+ var content = new Utf8JsonRequestContent();
+ content.JsonWriter.WriteObjectValue(this, ModelSerializationExtensions.WireOptions);
+ return content;
+ }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionBinding.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionBinding.cs
new file mode 100644
index 0000000000000..9b69be69cb44a
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionBinding.cs
@@ -0,0 +1,69 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.Collections.Generic;
+
+namespace Azure.AI.Projects
+{
+ ///
+ /// The Azure function binding
+ /// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
+ /// The available derived classes include .
+ ///
+ public abstract partial class AzureFunctionBinding
+ {
+ ///
+ /// Keeps track of any properties unknown to the library.
+ ///
+ /// To assign an object to the value of this property use .
+ ///
+ ///
+ /// To assign an already formatted json string to this property use .
+ ///
+ ///
+ /// Examples:
+ ///
+ /// -
+ /// BinaryData.FromObjectAsJson("foo")
+ /// Creates a payload of "foo".
+ ///
+ /// -
+ /// BinaryData.FromString("\"foo\"")
+ /// Creates a payload of "foo".
+ ///
+ /// -
+ /// BinaryData.FromObjectAsJson(new { key = "value" })
+ /// Creates a payload of { "key": "value" }.
+ ///
+ /// -
+ /// BinaryData.FromString("{\"key\": \"value\"}")
+ /// Creates a payload of { "key": "value" }.
+ ///
+ ///
+ ///
+ ///
+ private protected IDictionary _serializedAdditionalRawData;
+
+ /// Initializes a new instance of .
+ protected AzureFunctionBinding()
+ {
+ }
+
+ /// Initializes a new instance of .
+ /// The type of binding.
+ /// Keeps track of any properties unknown to the library.
+ internal AzureFunctionBinding(string type, IDictionary serializedAdditionalRawData)
+ {
+ Type = type;
+ _serializedAdditionalRawData = serializedAdditionalRawData;
+ }
+
+ /// The type of binding.
+ internal string Type { get; set; }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.Serialization.cs
new file mode 100644
index 0000000000000..2bf449af09543
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.Serialization.cs
@@ -0,0 +1,158 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.ClientModel.Primitives;
+using System.Collections.Generic;
+using System.Text.Json;
+using Azure.Core;
+
+namespace Azure.AI.Projects
+{
+ public partial class AzureFunctionDefinition : IUtf8JsonSerializable, IJsonModel
+ {
+ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IJsonModel)this).Write(writer, ModelSerializationExtensions.WireOptions);
+
+ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ writer.WriteStartObject();
+ JsonModelWriteCore(writer, options);
+ writer.WriteEndObject();
+ }
+
+ /// The JSON writer.
+ /// The client options for reading and writing models.
+ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionDefinition)} does not support writing '{format}' format.");
+ }
+
+ writer.WritePropertyName("function"u8);
+ writer.WriteObjectValue(InternalFunction, options);
+ writer.WritePropertyName("input_binding"u8);
+ writer.WriteObjectValue(InputBinding, options);
+ writer.WritePropertyName("output_binding"u8);
+ writer.WriteObjectValue(OutputBinding, options);
+ if (options.Format != "W" && _serializedAdditionalRawData != null)
+ {
+ foreach (var item in _serializedAdditionalRawData)
+ {
+ writer.WritePropertyName(item.Key);
+#if NET6_0_OR_GREATER
+ writer.WriteRawValue(item.Value);
+#else
+ using (JsonDocument document = JsonDocument.Parse(item.Value))
+ {
+ JsonSerializer.Serialize(writer, document.RootElement);
+ }
+#endif
+ }
+ }
+ }
+
+ AzureFunctionDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionDefinition)} does not support reading '{format}' format.");
+ }
+
+ using JsonDocument document = JsonDocument.ParseValue(ref reader);
+ return DeserializeAzureFunctionDefinition(document.RootElement, options);
+ }
+
+ internal static AzureFunctionDefinition DeserializeAzureFunctionDefinition(JsonElement element, ModelReaderWriterOptions options = null)
+ {
+ options ??= ModelSerializationExtensions.WireOptions;
+
+ if (element.ValueKind == JsonValueKind.Null)
+ {
+ return null;
+ }
+ InternalFunctionDefinition function = default;
+ AzureStorageQueueBinding inputBinding = default;
+ AzureStorageQueueBinding outputBinding = default;
+ IDictionary serializedAdditionalRawData = default;
+ Dictionary rawDataDictionary = new Dictionary();
+ foreach (var property in element.EnumerateObject())
+ {
+ if (property.NameEquals("function"u8))
+ {
+ function = InternalFunctionDefinition.DeserializeInternalFunctionDefinition(property.Value, options);
+ continue;
+ }
+ if (property.NameEquals("input_binding"u8))
+ {
+ inputBinding = AzureStorageQueueBinding.DeserializeAzureStorageQueueBinding(property.Value, options);
+ continue;
+ }
+ if (property.NameEquals("output_binding"u8))
+ {
+ outputBinding = AzureStorageQueueBinding.DeserializeAzureStorageQueueBinding(property.Value, options);
+ continue;
+ }
+ if (options.Format != "W")
+ {
+ rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText()));
+ }
+ }
+ serializedAdditionalRawData = rawDataDictionary;
+ return new AzureFunctionDefinition(function, inputBinding, outputBinding, serializedAdditionalRawData);
+ }
+
+ BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ return ModelReaderWriter.Write(this, options);
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionDefinition)} does not support writing '{options.Format}' format.");
+ }
+ }
+
+ AzureFunctionDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ {
+ using JsonDocument document = JsonDocument.Parse(data);
+ return DeserializeAzureFunctionDefinition(document.RootElement, options);
+ }
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionDefinition)} does not support reading '{options.Format}' format.");
+ }
+ }
+
+ string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// Deserializes the model from a raw response.
+ /// The response to deserialize the model from.
+ internal static AzureFunctionDefinition FromResponse(Response response)
+ {
+ using var document = JsonDocument.Parse(response.Content);
+ return DeserializeAzureFunctionDefinition(document.RootElement);
+ }
+
+ /// Convert into a .
+ internal virtual RequestContent ToRequestContent()
+ {
+ var content = new Utf8JsonRequestContent();
+ content.JsonWriter.WriteObjectValue(this, ModelSerializationExtensions.WireOptions);
+ return content;
+ }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs
new file mode 100644
index 0000000000000..9063e85e8c4d2
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs
@@ -0,0 +1,86 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.Collections.Generic;
+
+namespace Azure.AI.Projects
+{
+ /// The definition of Azure function.
+ public partial class AzureFunctionDefinition
+ {
+ ///
+ /// Keeps track of any properties unknown to the library.
+ ///
+ /// To assign an object to the value of this property use .
+ ///
+ ///
+ /// To assign an already formatted json string to this property use .
+ ///
+ ///
+ /// Examples:
+ ///
+ /// -
+ /// BinaryData.FromObjectAsJson("foo")
+ /// Creates a payload of "foo".
+ ///
+ /// -
+ /// BinaryData.FromString("\"foo\"")
+ /// Creates a payload of "foo".
+ ///
+ /// -
+ /// BinaryData.FromObjectAsJson(new { key = "value" })
+ /// Creates a payload of { "key": "value" }.
+ ///
+ /// -
+ /// BinaryData.FromString("{\"key\": \"value\"}")
+ /// Creates a payload of { "key": "value" }.
+ ///
+ ///
+ ///
+ ///
+ private IDictionary _serializedAdditionalRawData;
+
+ /// Initializes a new instance of .
+ /// The definition of azure function and its parameters.
+ /// Input storage queue.
+ /// Output storage queue.
+ /// , or is null.
+ public AzureFunctionDefinition(InternalFunctionDefinition internalFunction, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding)
+ {
+ Argument.AssertNotNull(internalFunction, nameof(internalFunction));
+ Argument.AssertNotNull(inputBinding, nameof(inputBinding));
+ Argument.AssertNotNull(outputBinding, nameof(outputBinding));
+
+ InternalFunction = internalFunction;
+ InputBinding = inputBinding;
+ OutputBinding = outputBinding;
+ }
+
+ /// Initializes a new instance of .
+ /// The definition of azure function and its parameters.
+ /// Input storage queue.
+ /// Output storage queue.
+ /// Keeps track of any properties unknown to the library.
+ internal AzureFunctionDefinition(InternalFunctionDefinition internalFunction, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding, IDictionary serializedAdditionalRawData)
+ {
+ InternalFunction = internalFunction;
+ InputBinding = inputBinding;
+ OutputBinding = outputBinding;
+ _serializedAdditionalRawData = serializedAdditionalRawData;
+ }
+
+ /// Initializes a new instance of for deserialization.
+ internal AzureFunctionDefinition()
+ {
+ }
+ /// Input storage queue.
+ public AzureStorageQueueBinding InputBinding { get; set; }
+ /// Output storage queue.
+ public AzureStorageQueueBinding OutputBinding { get; set; }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionStorageQueue.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionStorageQueue.Serialization.cs
new file mode 100644
index 0000000000000..745777a4bb18a
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionStorageQueue.Serialization.cs
@@ -0,0 +1,150 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.ClientModel.Primitives;
+using System.Collections.Generic;
+using System.Text.Json;
+using Azure.Core;
+
+namespace Azure.AI.Projects
+{
+ public partial class AzureFunctionStorageQueue : IUtf8JsonSerializable, IJsonModel
+ {
+ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IJsonModel)this).Write(writer, ModelSerializationExtensions.WireOptions);
+
+ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ writer.WriteStartObject();
+ JsonModelWriteCore(writer, options);
+ writer.WriteEndObject();
+ }
+
+ /// The JSON writer.
+ /// The client options for reading and writing models.
+ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionStorageQueue)} does not support writing '{format}' format.");
+ }
+
+ writer.WritePropertyName("queue_service_uri"u8);
+ writer.WriteStringValue(StorageQueueUri);
+ writer.WritePropertyName("queue_name"u8);
+ writer.WriteStringValue(QueueName);
+ if (options.Format != "W" && _serializedAdditionalRawData != null)
+ {
+ foreach (var item in _serializedAdditionalRawData)
+ {
+ writer.WritePropertyName(item.Key);
+#if NET6_0_OR_GREATER
+ writer.WriteRawValue(item.Value);
+#else
+ using (JsonDocument document = JsonDocument.Parse(item.Value))
+ {
+ JsonSerializer.Serialize(writer, document.RootElement);
+ }
+#endif
+ }
+ }
+ }
+
+ AzureFunctionStorageQueue IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionStorageQueue)} does not support reading '{format}' format.");
+ }
+
+ using JsonDocument document = JsonDocument.ParseValue(ref reader);
+ return DeserializeAzureFunctionStorageQueue(document.RootElement, options);
+ }
+
+ internal static AzureFunctionStorageQueue DeserializeAzureFunctionStorageQueue(JsonElement element, ModelReaderWriterOptions options = null)
+ {
+ options ??= ModelSerializationExtensions.WireOptions;
+
+ if (element.ValueKind == JsonValueKind.Null)
+ {
+ return null;
+ }
+ string queueServiceUri = default;
+ string queueName = default;
+ IDictionary serializedAdditionalRawData = default;
+ Dictionary rawDataDictionary = new Dictionary();
+ foreach (var property in element.EnumerateObject())
+ {
+ if (property.NameEquals("queue_service_uri"u8))
+ {
+ queueServiceUri = property.Value.GetString();
+ continue;
+ }
+ if (property.NameEquals("queue_name"u8))
+ {
+ queueName = property.Value.GetString();
+ continue;
+ }
+ if (options.Format != "W")
+ {
+ rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText()));
+ }
+ }
+ serializedAdditionalRawData = rawDataDictionary;
+ return new AzureFunctionStorageQueue(queueServiceUri, queueName, serializedAdditionalRawData);
+ }
+
+ BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ return ModelReaderWriter.Write(this, options);
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionStorageQueue)} does not support writing '{options.Format}' format.");
+ }
+ }
+
+ AzureFunctionStorageQueue IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ {
+ using JsonDocument document = JsonDocument.Parse(data);
+ return DeserializeAzureFunctionStorageQueue(document.RootElement, options);
+ }
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionStorageQueue)} does not support reading '{options.Format}' format.");
+ }
+ }
+
+ string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// Deserializes the model from a raw response.
+ /// The response to deserialize the model from.
+ internal static AzureFunctionStorageQueue FromResponse(Response response)
+ {
+ using var document = JsonDocument.Parse(response.Content);
+ return DeserializeAzureFunctionStorageQueue(document.RootElement);
+ }
+
+ /// Convert into a .
+ internal virtual RequestContent ToRequestContent()
+ {
+ var content = new Utf8JsonRequestContent();
+ content.JsonWriter.WriteObjectValue(this, ModelSerializationExtensions.WireOptions);
+ return content;
+ }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionStorageQueue.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionStorageQueue.cs
new file mode 100644
index 0000000000000..3d3e0b45d42de
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionStorageQueue.cs
@@ -0,0 +1,82 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.Collections.Generic;
+
+namespace Azure.AI.Projects
+{
+ /// The structure for keeping storage queue name and URI.
+ public partial class AzureFunctionStorageQueue
+ {
+ ///
+ /// Keeps track of any properties unknown to the library.
+ ///
+ /// To assign an object to the value of this property use .
+ ///
+ ///
+ /// To assign an already formatted json string to this property use .
+ ///
+ ///
+ /// Examples:
+ ///
+ /// -
+ /// BinaryData.FromObjectAsJson("foo")
+ /// Creates a payload of "foo".
+ ///
+ /// -
+ /// BinaryData.FromString("\"foo\"")
+ /// Creates a payload of "foo".
+ ///
+ /// -
+ /// BinaryData.FromObjectAsJson(new { key = "value" })
+ /// Creates a payload of { "key": "value" }.
+ ///
+ /// -
+ /// BinaryData.FromString("{\"key\": \"value\"}")
+ /// Creates a payload of { "key": "value" }.
+ ///
+ ///
+ ///
+ ///
+ private IDictionary _serializedAdditionalRawData;
+
+ /// Initializes a new instance of .
+ /// The URI of an Azure function storage queue.
+ /// The name of an Azure function storage queue.
+ /// or is null.
+ public AzureFunctionStorageQueue(string storageQueueUri, string queueName)
+ {
+ Argument.AssertNotNull(storageQueueUri, nameof(storageQueueUri));
+ Argument.AssertNotNull(queueName, nameof(queueName));
+
+ StorageQueueUri = storageQueueUri;
+ QueueName = queueName;
+ }
+
+ /// Initializes a new instance of .
+ /// The URI of an Azure function storage queue.
+ /// The name of an Azure function storage queue.
+ /// Keeps track of any properties unknown to the library.
+ internal AzureFunctionStorageQueue(string storageQueueUri, string queueName, IDictionary serializedAdditionalRawData)
+ {
+ StorageQueueUri = storageQueueUri;
+ QueueName = queueName;
+ _serializedAdditionalRawData = serializedAdditionalRawData;
+ }
+
+ /// Initializes a new instance of for deserialization.
+ internal AzureFunctionStorageQueue()
+ {
+ }
+
+ /// The URI of an Azure function storage queue.
+ public string StorageQueueUri { get; set; }
+ /// The name of an Azure function storage queue.
+ public string QueueName { get; set; }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.Serialization.cs
new file mode 100644
index 0000000000000..0515abf2f6cf7
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.Serialization.cs
@@ -0,0 +1,134 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.ClientModel.Primitives;
+using System.Collections.Generic;
+using System.Text.Json;
+using Azure.Core;
+
+namespace Azure.AI.Projects
+{
+ public partial class AzureFunctionToolDefinition : IUtf8JsonSerializable, IJsonModel
+ {
+ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IJsonModel)this).Write(writer, ModelSerializationExtensions.WireOptions);
+
+ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ writer.WriteStartObject();
+ JsonModelWriteCore(writer, options);
+ writer.WriteEndObject();
+ }
+
+ /// The JSON writer.
+ /// The client options for reading and writing models.
+ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionToolDefinition)} does not support writing '{format}' format.");
+ }
+
+ base.JsonModelWriteCore(writer, options);
+ writer.WritePropertyName("azure_function"u8);
+ writer.WriteObjectValue(AzureFunction, options);
+ }
+
+ AzureFunctionToolDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionToolDefinition)} does not support reading '{format}' format.");
+ }
+
+ using JsonDocument document = JsonDocument.ParseValue(ref reader);
+ return DeserializeAzureFunctionToolDefinition(document.RootElement, options);
+ }
+
+ internal static AzureFunctionToolDefinition DeserializeAzureFunctionToolDefinition(JsonElement element, ModelReaderWriterOptions options = null)
+ {
+ options ??= ModelSerializationExtensions.WireOptions;
+
+ if (element.ValueKind == JsonValueKind.Null)
+ {
+ return null;
+ }
+ AzureFunctionDefinition azureFunction = default;
+ string type = default;
+ IDictionary serializedAdditionalRawData = default;
+ Dictionary rawDataDictionary = new Dictionary();
+ foreach (var property in element.EnumerateObject())
+ {
+ if (property.NameEquals("azure_function"u8))
+ {
+ azureFunction = AzureFunctionDefinition.DeserializeAzureFunctionDefinition(property.Value, options);
+ continue;
+ }
+ if (property.NameEquals("type"u8))
+ {
+ type = property.Value.GetString();
+ continue;
+ }
+ if (options.Format != "W")
+ {
+ rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText()));
+ }
+ }
+ serializedAdditionalRawData = rawDataDictionary;
+ return new AzureFunctionToolDefinition(type, serializedAdditionalRawData, azureFunction);
+ }
+
+ BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ return ModelReaderWriter.Write(this, options);
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionToolDefinition)} does not support writing '{options.Format}' format.");
+ }
+ }
+
+ AzureFunctionToolDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ {
+ using JsonDocument document = JsonDocument.Parse(data);
+ return DeserializeAzureFunctionToolDefinition(document.RootElement, options);
+ }
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionToolDefinition)} does not support reading '{options.Format}' format.");
+ }
+ }
+
+ string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// Deserializes the model from a raw response.
+ /// The response to deserialize the model from.
+ internal static new AzureFunctionToolDefinition FromResponse(Response response)
+ {
+ using var document = JsonDocument.Parse(response.Content);
+ return DeserializeAzureFunctionToolDefinition(document.RootElement);
+ }
+
+ /// Convert into a .
+ internal override RequestContent ToRequestContent()
+ {
+ var content = new Utf8JsonRequestContent();
+ content.JsonWriter.WriteObjectValue(this, ModelSerializationExtensions.WireOptions);
+ return content;
+ }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.cs
new file mode 100644
index 0000000000000..1a6d339a85886
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.cs
@@ -0,0 +1,44 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.Collections.Generic;
+
+namespace Azure.AI.Projects
+{
+ /// The input definition information for a azure function tool as used to configure an agent.
+ public partial class AzureFunctionToolDefinition : ToolDefinition
+ {
+ /// Initializes a new instance of .
+ /// The definition of the concrete function that the function tool should call.
+ /// is null.
+ public AzureFunctionToolDefinition(AzureFunctionDefinition azureFunction)
+ {
+ Argument.AssertNotNull(azureFunction, nameof(azureFunction));
+
+ Type = "azure_function";
+ AzureFunction = azureFunction;
+ }
+
+ /// Initializes a new instance of .
+ /// The object type.
+ /// Keeps track of any properties unknown to the library.
+ /// The definition of the concrete function that the function tool should call.
+ internal AzureFunctionToolDefinition(string type, IDictionary serializedAdditionalRawData, AzureFunctionDefinition azureFunction) : base(type, serializedAdditionalRawData)
+ {
+ AzureFunction = azureFunction;
+ }
+
+ /// Initializes a new instance of for deserialization.
+ internal AzureFunctionToolDefinition()
+ {
+ }
+
+ /// The definition of the concrete function that the function tool should call.
+ public AzureFunctionDefinition AzureFunction { get; set; }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureStorageQueueBinding.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureStorageQueueBinding.Serialization.cs
new file mode 100644
index 0000000000000..e8f8f9edba5e3
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureStorageQueueBinding.Serialization.cs
@@ -0,0 +1,134 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.ClientModel.Primitives;
+using System.Collections.Generic;
+using System.Text.Json;
+using Azure.Core;
+
+namespace Azure.AI.Projects
+{
+ public partial class AzureStorageQueueBinding : IUtf8JsonSerializable, IJsonModel
+ {
+ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IJsonModel)this).Write(writer, ModelSerializationExtensions.WireOptions);
+
+ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ writer.WriteStartObject();
+ JsonModelWriteCore(writer, options);
+ writer.WriteEndObject();
+ }
+
+ /// The JSON writer.
+ /// The client options for reading and writing models.
+ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureStorageQueueBinding)} does not support writing '{format}' format.");
+ }
+
+ base.JsonModelWriteCore(writer, options);
+ writer.WritePropertyName("storage_queue"u8);
+ writer.WriteObjectValue(StorageQueue, options);
+ }
+
+ AzureStorageQueueBinding IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureStorageQueueBinding)} does not support reading '{format}' format.");
+ }
+
+ using JsonDocument document = JsonDocument.ParseValue(ref reader);
+ return DeserializeAzureStorageQueueBinding(document.RootElement, options);
+ }
+
+ internal static AzureStorageQueueBinding DeserializeAzureStorageQueueBinding(JsonElement element, ModelReaderWriterOptions options = null)
+ {
+ options ??= ModelSerializationExtensions.WireOptions;
+
+ if (element.ValueKind == JsonValueKind.Null)
+ {
+ return null;
+ }
+ AzureFunctionStorageQueue storageQueue = default;
+ string type = default;
+ IDictionary serializedAdditionalRawData = default;
+ Dictionary rawDataDictionary = new Dictionary();
+ foreach (var property in element.EnumerateObject())
+ {
+ if (property.NameEquals("storage_queue"u8))
+ {
+ storageQueue = AzureFunctionStorageQueue.DeserializeAzureFunctionStorageQueue(property.Value, options);
+ continue;
+ }
+ if (property.NameEquals("type"u8))
+ {
+ type = property.Value.GetString();
+ continue;
+ }
+ if (options.Format != "W")
+ {
+ rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText()));
+ }
+ }
+ serializedAdditionalRawData = rawDataDictionary;
+ return new AzureStorageQueueBinding(type, serializedAdditionalRawData, storageQueue);
+ }
+
+ BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ return ModelReaderWriter.Write(this, options);
+ default:
+ throw new FormatException($"The model {nameof(AzureStorageQueueBinding)} does not support writing '{options.Format}' format.");
+ }
+ }
+
+ AzureStorageQueueBinding IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ {
+ using JsonDocument document = JsonDocument.Parse(data);
+ return DeserializeAzureStorageQueueBinding(document.RootElement, options);
+ }
+ default:
+ throw new FormatException($"The model {nameof(AzureStorageQueueBinding)} does not support reading '{options.Format}' format.");
+ }
+ }
+
+ string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// Deserializes the model from a raw response.
+ /// The response to deserialize the model from.
+ internal static new AzureStorageQueueBinding FromResponse(Response response)
+ {
+ using var document = JsonDocument.Parse(response.Content);
+ return DeserializeAzureStorageQueueBinding(document.RootElement);
+ }
+
+ /// Convert into a .
+ internal override RequestContent ToRequestContent()
+ {
+ var content = new Utf8JsonRequestContent();
+ content.JsonWriter.WriteObjectValue(this, ModelSerializationExtensions.WireOptions);
+ return content;
+ }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureStorageQueueBinding.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureStorageQueueBinding.cs
new file mode 100644
index 0000000000000..7f3593f0fa407
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureStorageQueueBinding.cs
@@ -0,0 +1,44 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.Collections.Generic;
+
+namespace Azure.AI.Projects
+{
+ /// The definition of input or output queue for Azure function.
+ public partial class AzureStorageQueueBinding : AzureFunctionBinding
+ {
+ /// Initializes a new instance of .
+ /// Storage queue.
+ /// is null.
+ public AzureStorageQueueBinding(AzureFunctionStorageQueue storageQueue)
+ {
+ Argument.AssertNotNull(storageQueue, nameof(storageQueue));
+
+ Type = "storage_queue";
+ StorageQueue = storageQueue;
+ }
+
+ /// Initializes a new instance of .
+ /// The type of binding.
+ /// Keeps track of any properties unknown to the library.
+ /// Storage queue.
+ internal AzureStorageQueueBinding(string type, IDictionary serializedAdditionalRawData, AzureFunctionStorageQueue storageQueue) : base(type, serializedAdditionalRawData)
+ {
+ StorageQueue = storageQueue;
+ }
+
+ /// Initializes a new instance of for deserialization.
+ internal AzureStorageQueueBinding()
+ {
+ }
+
+ /// Storage queue.
+ public AzureFunctionStorageQueue StorageQueue { get; set; }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/CodeInterpreterToolResource.cs b/sdk/ai/Azure.AI.Projects/src/Generated/CodeInterpreterToolResource.cs
index 1e49d70a3a98c..5eebfab8f0852 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/CodeInterpreterToolResource.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/CodeInterpreterToolResource.cs
@@ -57,7 +57,7 @@ public CodeInterpreterToolResource()
/// A list of file IDs made available to the `code_interpreter` tool. There can be a maximum of 20 files
/// associated with the tool.
///
- /// The data sources to be used. This option is mutually exclusive with fileIds.
+ /// The data sources to be used. This option is mutually exclusive with the `fileIds` property.
/// Keeps track of any properties unknown to the library.
internal CodeInterpreterToolResource(IList fileIds, IList dataSources, IDictionary serializedAdditionalRawData)
{
@@ -71,7 +71,7 @@ internal CodeInterpreterToolResource(IList fileIds, IList
public IList FileIds { get; }
- /// The data sources to be used. This option is mutually exclusive with fileIds.
+ /// The data sources to be used. This option is mutually exclusive with the `fileIds` property.
public IList DataSources { get; }
}
}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/CreateAgentRequest.cs b/sdk/ai/Azure.AI.Projects/src/Generated/CreateAgentRequest.cs
index 606b205632601..1f51e5beb380b 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/CreateAgentRequest.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/CreateAgentRequest.cs
@@ -65,7 +65,7 @@ internal CreateAgentRequest(string model)
///
/// The collection of tools to enable for the new agent.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
///
/// A set of resources that are used by the agent's tools. The resources are specific to the type of tool. For example, the `code_interpreter`
@@ -115,7 +115,7 @@ internal CreateAgentRequest()
///
/// The collection of tools to enable for the new agent.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
public IReadOnlyList Tools { get; }
///
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/CreateRunRequest.cs b/sdk/ai/Azure.AI.Projects/src/Generated/CreateRunRequest.cs
index b47736e413ebf..2b07343d4fa92 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/CreateRunRequest.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/CreateRunRequest.cs
@@ -70,7 +70,7 @@ internal CreateRunRequest(string assistantId)
///
/// The overridden list of enabled tools that the agent should use to run the thread.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
///
/// If `true`, returns a stream of events that happen during the Run as server-sent events,
@@ -143,7 +143,7 @@ internal CreateRunRequest()
///
/// The overridden list of enabled tools that the agent should use to run the thread.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
public IReadOnlyList OverrideTools { get; }
///
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/CreateThreadAndRunRequest.cs b/sdk/ai/Azure.AI.Projects/src/Generated/CreateThreadAndRunRequest.cs
index 1a002dd86bdd3..f3129e4a93ddc 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/CreateThreadAndRunRequest.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/CreateThreadAndRunRequest.cs
@@ -65,7 +65,7 @@ internal CreateThreadAndRunRequest(string assistantId)
///
/// The overridden list of enabled tools the agent should use to run the thread.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
/// Override the tools the agent can use for this run. This is useful for modifying the behavior on a per-run basis.
///
@@ -134,7 +134,7 @@ internal CreateThreadAndRunRequest()
///
/// The overridden list of enabled tools the agent should use to run the thread.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
public IReadOnlyList OverrideTools { get; }
/// Override the tools the agent can use for this run. This is useful for modifying the behavior on a per-run basis.
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/FileSearchToolResource.cs b/sdk/ai/Azure.AI.Projects/src/Generated/FileSearchToolResource.cs
index da9f6a2ceb26e..9dc2301d67eaa 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/FileSearchToolResource.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/FileSearchToolResource.cs
@@ -58,9 +58,9 @@ public FileSearchToolResource()
/// store attached to the agent.
///
///
- /// The list of vector store configuration objects from Azure. This list is limited to one
- /// element. The only element of this list contains
- /// the list of azure asset IDs used by the search tool.
+ /// The list of vector store configuration objects from Azure.
+ /// This list is limited to one element.
+ /// The only element of this list contains the list of azure asset IDs used by the search tool.
///
/// Keeps track of any properties unknown to the library.
internal FileSearchToolResource(IList vectorStoreIds, IList vectorStores, IDictionary serializedAdditionalRawData)
@@ -76,9 +76,9 @@ internal FileSearchToolResource(IList vectorStoreIds, IList
public IList VectorStoreIds { get; }
///
- /// The list of vector store configuration objects from Azure. This list is limited to one
- /// element. The only element of this list contains
- /// the list of azure asset IDs used by the search tool.
+ /// The list of vector store configuration objects from Azure.
+ /// This list is limited to one element.
+ /// The only element of this list contains the list of azure asset IDs used by the search tool.
///
public IList VectorStores { get; }
}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/MicrosoftFabricToolDefinition.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/MicrosoftFabricToolDefinition.Serialization.cs
index 74fb6c1c1968a..ad1aecac60134 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/MicrosoftFabricToolDefinition.Serialization.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/MicrosoftFabricToolDefinition.Serialization.cs
@@ -35,8 +35,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri
}
base.JsonModelWriteCore(writer, options);
- writer.WritePropertyName("microsoft_fabric"u8);
- writer.WriteObjectValue(MicrosoftFabric, options);
+ writer.WritePropertyName("fabric_aiskill"u8);
+ writer.WriteObjectValue(FabricAiskill, options);
}
MicrosoftFabricToolDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
@@ -59,15 +59,15 @@ internal static MicrosoftFabricToolDefinition DeserializeMicrosoftFabricToolDefi
{
return null;
}
- ToolConnectionList microsoftFabric = default;
+ ToolConnectionList fabricAiskill = default;
string type = default;
IDictionary serializedAdditionalRawData = default;
Dictionary rawDataDictionary = new Dictionary();
foreach (var property in element.EnumerateObject())
{
- if (property.NameEquals("microsoft_fabric"u8))
+ if (property.NameEquals("fabric_aiskill"u8))
{
- microsoftFabric = ToolConnectionList.DeserializeToolConnectionList(property.Value, options);
+ fabricAiskill = ToolConnectionList.DeserializeToolConnectionList(property.Value, options);
continue;
}
if (property.NameEquals("type"u8))
@@ -81,7 +81,7 @@ internal static MicrosoftFabricToolDefinition DeserializeMicrosoftFabricToolDefi
}
}
serializedAdditionalRawData = rawDataDictionary;
- return new MicrosoftFabricToolDefinition(type, serializedAdditionalRawData, microsoftFabric);
+ return new MicrosoftFabricToolDefinition(type, serializedAdditionalRawData, fabricAiskill);
}
BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/MicrosoftFabricToolDefinition.cs b/sdk/ai/Azure.AI.Projects/src/Generated/MicrosoftFabricToolDefinition.cs
index fb886ddbd8693..f62e63d2f7f01 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/MicrosoftFabricToolDefinition.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/MicrosoftFabricToolDefinition.cs
@@ -14,23 +14,23 @@ namespace Azure.AI.Projects
public partial class MicrosoftFabricToolDefinition : ToolDefinition
{
/// Initializes a new instance of .
- /// The list of connections used by the Microsoft Fabric tool.
- /// is null.
- public MicrosoftFabricToolDefinition(ToolConnectionList microsoftFabric)
+ /// The list of connections used by the Microsoft Fabric tool.
+ /// is null.
+ public MicrosoftFabricToolDefinition(ToolConnectionList fabricAiskill)
{
- Argument.AssertNotNull(microsoftFabric, nameof(microsoftFabric));
+ Argument.AssertNotNull(fabricAiskill, nameof(fabricAiskill));
- Type = "microsoft_fabric";
- MicrosoftFabric = microsoftFabric;
+ Type = "fabric_aiskill";
+ FabricAiskill = fabricAiskill;
}
/// Initializes a new instance of .
/// The object type.
/// Keeps track of any properties unknown to the library.
- /// The list of connections used by the Microsoft Fabric tool.
- internal MicrosoftFabricToolDefinition(string type, IDictionary serializedAdditionalRawData, ToolConnectionList microsoftFabric) : base(type, serializedAdditionalRawData)
+ /// The list of connections used by the Microsoft Fabric tool.
+ internal MicrosoftFabricToolDefinition(string type, IDictionary serializedAdditionalRawData, ToolConnectionList fabricAiskill) : base(type, serializedAdditionalRawData)
{
- MicrosoftFabric = microsoftFabric;
+ FabricAiskill = fabricAiskill;
}
/// Initializes a new instance of for deserialization.
@@ -39,6 +39,6 @@ internal MicrosoftFabricToolDefinition()
}
/// The list of connections used by the Microsoft Fabric tool.
- public ToolConnectionList MicrosoftFabric { get; set; }
+ public ToolConnectionList FabricAiskill { get; set; }
}
}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/RequiredToolCall.cs b/sdk/ai/Azure.AI.Projects/src/Generated/RequiredToolCall.cs
index f9e94be0b0fd9..abeb4d7c18ec5 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/RequiredToolCall.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/RequiredToolCall.cs
@@ -11,7 +11,7 @@
namespace Azure.AI.Projects
{
///
- /// An abstract representation a a tool invocation needed by the model to continue a run.
+ /// An abstract representation of a tool invocation needed by the model to continue a run.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
/// The available derived classes include .
///
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/RunStepMicrosoftFabricToolCall.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/RunStepMicrosoftFabricToolCall.Serialization.cs
index e4cbd4acd5903..1b3f42907d655 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/RunStepMicrosoftFabricToolCall.Serialization.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/RunStepMicrosoftFabricToolCall.Serialization.cs
@@ -35,7 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri
}
base.JsonModelWriteCore(writer, options);
- writer.WritePropertyName("microsoft_fabric"u8);
+ writer.WritePropertyName("fabric_aiskill"u8);
writer.WriteStartObject();
foreach (var item in MicrosoftFabric)
{
@@ -65,21 +65,21 @@ internal static RunStepMicrosoftFabricToolCall DeserializeRunStepMicrosoftFabric
{
return null;
}
- IReadOnlyDictionary microsoftFabric = default;
+ IReadOnlyDictionary fabricAiskill = default;
string type = default;
string id = default;
IDictionary serializedAdditionalRawData = default;
Dictionary rawDataDictionary = new Dictionary();
foreach (var property in element.EnumerateObject())
{
- if (property.NameEquals("microsoft_fabric"u8))
+ if (property.NameEquals("fabric_aiskill"u8))
{
Dictionary dictionary = new Dictionary();
foreach (var property0 in property.Value.EnumerateObject())
{
dictionary.Add(property0.Name, property0.Value.GetString());
}
- microsoftFabric = dictionary;
+ fabricAiskill = dictionary;
continue;
}
if (property.NameEquals("type"u8))
@@ -98,7 +98,7 @@ internal static RunStepMicrosoftFabricToolCall DeserializeRunStepMicrosoftFabric
}
}
serializedAdditionalRawData = rawDataDictionary;
- return new RunStepMicrosoftFabricToolCall(type, id, serializedAdditionalRawData, microsoftFabric);
+ return new RunStepMicrosoftFabricToolCall(type, id, serializedAdditionalRawData, fabricAiskill);
}
BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/RunStepMicrosoftFabricToolCall.cs b/sdk/ai/Azure.AI.Projects/src/Generated/RunStepMicrosoftFabricToolCall.cs
index 15f664c26464a..b212127c06057 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/RunStepMicrosoftFabricToolCall.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/RunStepMicrosoftFabricToolCall.cs
@@ -25,7 +25,7 @@ internal RunStepMicrosoftFabricToolCall(string id, IReadOnlyDictionary
/// An abstract representation of a detailed tool call as recorded within a run step for an existing run.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , and .
///
public abstract partial class RunStepToolCall
{
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/RunStepToolCallDetails.cs b/sdk/ai/Azure.AI.Projects/src/Generated/RunStepToolCallDetails.cs
index f5a2490363ac0..f734d2d76efe3 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/RunStepToolCallDetails.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/RunStepToolCallDetails.cs
@@ -18,7 +18,7 @@ public partial class RunStepToolCallDetails : RunStepDetails
///
/// A list of tool call details for this run step.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , and .
///
/// is null.
internal RunStepToolCallDetails(IEnumerable toolCalls)
@@ -35,7 +35,7 @@ internal RunStepToolCallDetails(IEnumerable toolCalls)
///
/// A list of tool call details for this run step.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , and .
///
internal RunStepToolCallDetails(RunStepType type, IDictionary serializedAdditionalRawData, IReadOnlyList toolCalls) : base(type, serializedAdditionalRawData)
{
@@ -50,7 +50,7 @@ internal RunStepToolCallDetails()
///
/// A list of tool call details for this run step.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , and .
///
public IReadOnlyList ToolCalls { get; }
}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/ThreadRun.cs b/sdk/ai/Azure.AI.Projects/src/Generated/ThreadRun.cs
index e3aa03d008e09..e900ea19d9fe2 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/ThreadRun.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/ThreadRun.cs
@@ -57,7 +57,7 @@ public partial class ThreadRun
///
/// The overridden enabled tools used for this agent thread run.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
/// The Unix timestamp, in seconds, representing when this object was created.
/// The Unix timestamp, in seconds, representing when this item expires.
@@ -124,7 +124,7 @@ internal ThreadRun(string id, string threadId, string assistantId, RunStatus sta
///
/// The overridden enabled tools used for this agent thread run.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
/// The Unix timestamp, in seconds, representing when this object was created.
/// The Unix timestamp, in seconds, representing when this item expires.
@@ -207,7 +207,7 @@ internal ThreadRun()
///
/// The overridden enabled tools used for this agent thread run.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
public IReadOnlyList Tools { get; }
/// The Unix timestamp, in seconds, representing when this object was created.
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/ToolConnectionList.cs b/sdk/ai/Azure.AI.Projects/src/Generated/ToolConnectionList.cs
index f0969e099cd39..9b4fec134cef8 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/ToolConnectionList.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/ToolConnectionList.cs
@@ -10,7 +10,7 @@
namespace Azure.AI.Projects
{
- /// A set of connection resources currently used by either the `bing_grounding`, `microsoft_fabric`, or `sharepoint_grounding` tools.
+ /// A set of connection resources currently used by either the `bing_grounding`, `fabric_aiskill`, or `sharepoint_grounding` tools.
public partial class ToolConnectionList
{
///
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/ToolDefinition.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/ToolDefinition.Serialization.cs
index 6a49db04a1eff..4d414a891908c 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/ToolDefinition.Serialization.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/ToolDefinition.Serialization.cs
@@ -78,11 +78,12 @@ internal static ToolDefinition DeserializeToolDefinition(JsonElement element, Mo
switch (discriminator.GetString())
{
case "azure_ai_search": return AzureAISearchToolDefinition.DeserializeAzureAISearchToolDefinition(element, options);
+ case "azure_function": return AzureFunctionToolDefinition.DeserializeAzureFunctionToolDefinition(element, options);
case "bing_grounding": return BingGroundingToolDefinition.DeserializeBingGroundingToolDefinition(element, options);
case "code_interpreter": return CodeInterpreterToolDefinition.DeserializeCodeInterpreterToolDefinition(element, options);
+ case "fabric_aiskill": return MicrosoftFabricToolDefinition.DeserializeMicrosoftFabricToolDefinition(element, options);
case "file_search": return FileSearchToolDefinition.DeserializeFileSearchToolDefinition(element, options);
case "function": return FunctionToolDefinition.DeserializeFunctionToolDefinition(element, options);
- case "microsoft_fabric": return MicrosoftFabricToolDefinition.DeserializeMicrosoftFabricToolDefinition(element, options);
case "sharepoint_grounding": return SharepointToolDefinition.DeserializeSharepointToolDefinition(element, options);
}
}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/ToolDefinition.cs b/sdk/ai/Azure.AI.Projects/src/Generated/ToolDefinition.cs
index f55e424751739..d6ebe82f65fff 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/ToolDefinition.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/ToolDefinition.cs
@@ -13,7 +13,7 @@ namespace Azure.AI.Projects
///
/// An abstract representation of an input tool definition that an agent can use.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
public abstract partial class ToolDefinition
{
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/ToolResources.cs b/sdk/ai/Azure.AI.Projects/src/Generated/ToolResources.cs
index 28193fd49d85d..f3bc125c78b5c 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/ToolResources.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/ToolResources.cs
@@ -55,7 +55,7 @@ public ToolResources()
}
/// Initializes a new instance of .
- /// Resources to be used by the `code_interpreter tool` consisting of file IDs.
+ /// Resources to be used by the `code_interpreter` tool consisting of file IDs.
/// Resources to be used by the `file_search` tool consisting of vector store IDs.
/// Resources to be used by the `azure_ai_search` tool consisting of index IDs and names.
/// Keeps track of any properties unknown to the library.
@@ -67,7 +67,7 @@ internal ToolResources(CodeInterpreterToolResource codeInterpreter, FileSearchTo
_serializedAdditionalRawData = serializedAdditionalRawData;
}
- /// Resources to be used by the `code_interpreter tool` consisting of file IDs.
+ /// Resources to be used by the `code_interpreter` tool consisting of file IDs.
public CodeInterpreterToolResource CodeInterpreter { get; set; }
/// Resources to be used by the `file_search` tool consisting of vector store IDs.
public FileSearchToolResource FileSearch { get; set; }
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/UnknownAzureFunctionBinding.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/UnknownAzureFunctionBinding.Serialization.cs
new file mode 100644
index 0000000000000..23ba0a6949ba2
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/UnknownAzureFunctionBinding.Serialization.cs
@@ -0,0 +1,126 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.ClientModel.Primitives;
+using System.Collections.Generic;
+using System.Text.Json;
+using Azure.Core;
+
+namespace Azure.AI.Projects
+{
+ internal partial class UnknownAzureFunctionBinding : IUtf8JsonSerializable, IJsonModel
+ {
+ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IJsonModel)this).Write(writer, ModelSerializationExtensions.WireOptions);
+
+ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ writer.WriteStartObject();
+ JsonModelWriteCore(writer, options);
+ writer.WriteEndObject();
+ }
+
+ /// The JSON writer.
+ /// The client options for reading and writing models.
+ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionBinding)} does not support writing '{format}' format.");
+ }
+
+ base.JsonModelWriteCore(writer, options);
+ }
+
+ AzureFunctionBinding IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ if (format != "J")
+ {
+ throw new FormatException($"The model {nameof(AzureFunctionBinding)} does not support reading '{format}' format.");
+ }
+
+ using JsonDocument document = JsonDocument.ParseValue(ref reader);
+ return DeserializeAzureFunctionBinding(document.RootElement, options);
+ }
+
+ internal static UnknownAzureFunctionBinding DeserializeUnknownAzureFunctionBinding(JsonElement element, ModelReaderWriterOptions options = null)
+ {
+ options ??= ModelSerializationExtensions.WireOptions;
+
+ if (element.ValueKind == JsonValueKind.Null)
+ {
+ return null;
+ }
+ string type = "Unknown";
+ IDictionary serializedAdditionalRawData = default;
+ Dictionary rawDataDictionary = new Dictionary();
+ foreach (var property in element.EnumerateObject())
+ {
+ if (property.NameEquals("type"u8))
+ {
+ type = property.Value.GetString();
+ continue;
+ }
+ if (options.Format != "W")
+ {
+ rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText()));
+ }
+ }
+ serializedAdditionalRawData = rawDataDictionary;
+ return new UnknownAzureFunctionBinding(type, serializedAdditionalRawData);
+ }
+
+ BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ return ModelReaderWriter.Write(this, options);
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionBinding)} does not support writing '{options.Format}' format.");
+ }
+ }
+
+ AzureFunctionBinding IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options)
+ {
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+
+ switch (format)
+ {
+ case "J":
+ {
+ using JsonDocument document = JsonDocument.Parse(data);
+ return DeserializeAzureFunctionBinding(document.RootElement, options);
+ }
+ default:
+ throw new FormatException($"The model {nameof(AzureFunctionBinding)} does not support reading '{options.Format}' format.");
+ }
+ }
+
+ string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+
+ /// Deserializes the model from a raw response.
+ /// The response to deserialize the model from.
+ internal static new UnknownAzureFunctionBinding FromResponse(Response response)
+ {
+ using var document = JsonDocument.Parse(response.Content);
+ return DeserializeUnknownAzureFunctionBinding(document.RootElement);
+ }
+
+ /// Convert into a .
+ internal override RequestContent ToRequestContent()
+ {
+ var content = new Utf8JsonRequestContent();
+ content.JsonWriter.WriteObjectValue(this, ModelSerializationExtensions.WireOptions);
+ return content;
+ }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/UnknownAzureFunctionBinding.cs b/sdk/ai/Azure.AI.Projects/src/Generated/UnknownAzureFunctionBinding.cs
new file mode 100644
index 0000000000000..2abeeba1afb0e
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/UnknownAzureFunctionBinding.cs
@@ -0,0 +1,28 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+//
+
+#nullable disable
+
+using System;
+using System.Collections.Generic;
+
+namespace Azure.AI.Projects
+{
+ /// Unknown version of AzureFunctionBinding.
+ internal partial class UnknownAzureFunctionBinding : AzureFunctionBinding
+ {
+ /// Initializes a new instance of .
+ /// The type of binding.
+ /// Keeps track of any properties unknown to the library.
+ internal UnknownAzureFunctionBinding(string type, IDictionary serializedAdditionalRawData) : base(type, serializedAdditionalRawData)
+ {
+ }
+
+ /// Initializes a new instance of for deserialization.
+ internal UnknownAzureFunctionBinding()
+ {
+ }
+ }
+}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/UpdateAgentRequest.cs b/sdk/ai/Azure.AI.Projects/src/Generated/UpdateAgentRequest.cs
index 518491348498e..20d36641d6a5a 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/UpdateAgentRequest.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/UpdateAgentRequest.cs
@@ -60,7 +60,7 @@ internal UpdateAgentRequest()
///
/// The modified collection of tools to enable for the agent.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
///
/// A set of resources that are used by the agent's tools. The resources are specific to the type of tool. For example,
@@ -105,7 +105,7 @@ internal UpdateAgentRequest(string model, string name, string description, strin
///
/// The modified collection of tools to enable for the agent.
/// Please note is the base class. According to the scenario, a derived class of the base class might need to be assigned here, or this property needs to be casted to one of the possible derived classes.
- /// The available derived classes include , , , , , and .
+ /// The available derived classes include , , , , , , and .
///
public IReadOnlyList Tools { get; }
///
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/VectorStoreFileError.cs b/sdk/ai/Azure.AI.Projects/src/Generated/VectorStoreFileError.cs
index cd886e226df38..05eefeb612967 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/VectorStoreFileError.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/VectorStoreFileError.cs
@@ -10,7 +10,7 @@
namespace Azure.AI.Projects
{
- /// Details on the error that may have ocurred while processing a file for this vector store.
+ /// Details on the error that may have occurred while processing a file for this vector store.
public partial class VectorStoreFileError
{
///
diff --git a/sdk/ai/Azure.AI.Projects/tests/AIProjectsTestEnvironment.cs b/sdk/ai/Azure.AI.Projects/tests/AIProjectsTestEnvironment.cs
index 9e97874fba9c6..79be1bc28e73f 100644
--- a/sdk/ai/Azure.AI.Projects/tests/AIProjectsTestEnvironment.cs
+++ b/sdk/ai/Azure.AI.Projects/tests/AIProjectsTestEnvironment.cs
@@ -10,5 +10,6 @@ public class AIProjectsTestEnvironment : TestEnvironment
public string AzureAICONNECTIONSTRING => GetRecordedVariable("PROJECT_CONNECTION_STRING");
public string BINGCONNECTIONNAME => GetRecordedVariable("BING_CONNECTION_NAME");
public string MODELDEPLOYMENTNAME => GetRecordedVariable("MODEL_DEPLOYMENT_NAME");
+ public string STORAGE_QUEUE_URI => GetRecordedVariable("STORAGE_QUEUE_URI");
}
}
diff --git a/sdk/ai/Azure.AI.Projects/tsp-location.yaml b/sdk/ai/Azure.AI.Projects/tsp-location.yaml
index 3e09002b2b166..2c17cf7e39fea 100644
--- a/sdk/ai/Azure.AI.Projects/tsp-location.yaml
+++ b/sdk/ai/Azure.AI.Projects/tsp-location.yaml
@@ -1,4 +1,4 @@
directory: specification/ai/Azure.AI.Projects
-commit: a2c91a2b8411848584eda2c60d1b36d4e45b55e6
+commit: 278d3a9448aafdc6ded4f28ff5c8a50d3abef519
repo: Azure/azure-rest-api-specs
additionalDirectories:
From 74283e9dfa10b02d031a4a0378a46010153e95c1 Mon Sep 17 00:00:00 2001
From: nick863 <30440255+nick863@users.noreply.github.com>
Date: Fri, 22 Nov 2024 15:24:52 -0800
Subject: [PATCH 02/18] draft
---
.../src/Generated/AzureFunctionDefinition.cs | 2 +-
.../Agent/Sample_Agent_Azure_Functions.cs | 125 ++++++++++++++++++
2 files changed, 126 insertions(+), 1 deletion(-)
create mode 100644 sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs
index 9063e85e8c4d2..cbd7c4bcf342d 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs
@@ -50,7 +50,7 @@ public partial class AzureFunctionDefinition
/// Input storage queue.
/// Output storage queue.
/// , or is null.
- public AzureFunctionDefinition(InternalFunctionDefinition internalFunction, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding)
+ internal AzureFunctionDefinition(InternalFunctionDefinition internalFunction, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding)
{
Argument.AssertNotNull(internalFunction, nameof(internalFunction));
Argument.AssertNotNull(inputBinding, nameof(inputBinding));
diff --git a/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs b/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
new file mode 100644
index 0000000000000..c0f632084cb32
--- /dev/null
+++ b/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
@@ -0,0 +1,125 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+#nullable disable
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Threading.Tasks;
+using Azure.AI.Inference;
+using Azure.Core.TestFramework;
+using Microsoft.VisualStudio.TestPlatform.Utilities;
+using NUnit.Framework;
+
+namespace Azure.AI.Projects.Tests;
+
+public partial class Sample_Agent_Azure_Functions : SamplesBase
+{
+ [Test]
+ public async Task AzureFunctionCallingExample()
+ {
+ var connectionString = TestEnvironment.AzureAICONNECTIONSTRING;
+ var storageQueueUri = TestEnvironment.STORAGE_QUEUE_URI;
+ AgentsClient client = new(connectionString, new DefaultAzureCredential());
+
+ #region Snippet:AzureFunctionsDefineFunctionTools
+ // Example of Azure Function
+ AzureFunctionToolDefinition azureFnTool = new(
+ azureFunction: new AzureFunctionDefinition(
+ name: "foo",
+ description: "Get answers from the foo bot.",
+ inputBinding: new AzureStorageQueueBinding(
+ new AzureFunctionStorageQueue(
+ queueName: "azure-function-foo-input",
+ storageQueueUri: storageQueueUri
+ )
+ ),
+ outputBinding: new AzureStorageQueueBinding(
+ new AzureFunctionStorageQueue(
+ queueName: "azure-function-tool-output",
+ storageQueueUri: storageQueueUri
+ )
+ ),
+ parameters: BinaryData.FromObjectAsJson(
+ new
+ {
+ Type = "object",
+ Properties = new
+ {
+ query = new
+ {
+ Type = "string",
+ Description = "The question to ask.",
+ },
+ outputqueueuri = new
+ {
+ Type = "string",
+ Description = "The full output queue uri."
+ }
+ },
+ },
+ new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }
+ )
+ )
+ );
+ #endregion
+
+ #region Snippet:AzureFunctionsCreateAgentWithFunctionTools
+ // note: parallel function calling is only supported with newer models like gpt-4-1106-preview
+ Response agentResponse = await client.CreateAgentAsync(
+ model: "gpt-4-1106-preview",
+ name: "SDK Test Agent - Functions",
+ instructions: "You are a weather bot. Use the provided functions to help answer questions. "
+ + "Customize your responses to the user's preferences as much as possible and use friendly "
+ + "nicknames for cities whenever possible.",
+ tools: new List { azureFnTool }
+ );
+ Agent agent = agentResponse.Value;
+ #endregion
+
+ Response threadResponse = await client.CreateThreadAsync();
+ AgentThread thread = threadResponse.Value;
+
+ Response messageResponse = await client.CreateMessageAsync(
+ thread.Id,
+ MessageRole.User,
+ "What is the most prevalent element in the universe? What would foo say?");
+ ThreadMessage message = messageResponse.Value;
+
+ Response runResponse = await client.CreateRunAsync(thread, agent);
+
+ #region Snippet:AzureFunctionsHandlePollingWithRequiredAction
+ do
+ {
+ await Task.Delay(TimeSpan.FromMilliseconds(500));
+ runResponse = await client.GetRunAsync(thread.Id, runResponse.Value.Id);
+ }
+ while (runResponse.Value.Status == RunStatus.Queued
+ || runResponse.Value.Status == RunStatus.InProgress);
+ #endregion
+
+ Response> afterRunMessagesResponse
+ = await client.GetMessagesAsync(thread.Id);
+ IReadOnlyList messages = afterRunMessagesResponse.Value.Data;
+
+ // Note: messages iterate from newest to oldest, with the messages[0] being the most recent
+ foreach (ThreadMessage threadMessage in messages)
+ {
+ Console.Write($"{threadMessage.CreatedAt:yyyy-MM-dd HH:mm:ss} - {threadMessage.Role,10}: ");
+ foreach (MessageContent contentItem in threadMessage.ContentItems)
+ {
+ if (contentItem is MessageTextContent textItem)
+ {
+ Console.Write(textItem.Text);
+ }
+ else if (contentItem is MessageImageFileContent imageFileItem)
+ {
+ Console.Write($"
Date: Fri, 22 Nov 2024 17:52:54 -0800
Subject: [PATCH 03/18] Check in funxtional sample
---
.../Agent/Sample_Agent_Azure_Functions.cs | 26 ++++++++++++++-----
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs b/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
index c0f632084cb32..1ed567f232fe9 100644
--- a/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
+++ b/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
@@ -4,13 +4,12 @@
#nullable disable
using System;
-using System.Collections;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading.Tasks;
-using Azure.AI.Inference;
+using Azure.Core;
+using Azure.Core.Pipeline;
using Azure.Core.TestFramework;
-using Microsoft.VisualStudio.TestPlatform.Utilities;
using NUnit.Framework;
namespace Azure.AI.Projects.Tests;
@@ -22,7 +21,10 @@ public async Task AzureFunctionCallingExample()
{
var connectionString = TestEnvironment.AzureAICONNECTIONSTRING;
var storageQueueUri = TestEnvironment.STORAGE_QUEUE_URI;
- AgentsClient client = new(connectionString, new DefaultAzureCredential());
+ // Add experimental headers policy
+ AIProjectClientOptions clientOptions = new();
+ clientOptions.AddPolicy(new ExperimentalHeaderPolicy(), HttpPipelinePosition.PerCall);
+ AgentsClient client = new(connectionString, new DefaultAzureCredential(), clientOptions);
#region Snippet:AzureFunctionsDefineFunctionTools
// Example of Azure Function
@@ -67,9 +69,8 @@ public async Task AzureFunctionCallingExample()
#endregion
#region Snippet:AzureFunctionsCreateAgentWithFunctionTools
- // note: parallel function calling is only supported with newer models like gpt-4-1106-preview
Response agentResponse = await client.CreateAgentAsync(
- model: "gpt-4-1106-preview",
+ model: "gpt-4",
name: "SDK Test Agent - Functions",
instructions: "You are a weather bot. Use the provided functions to help answer questions. "
+ "Customize your responses to the user's preferences as much as possible and use friendly "
@@ -122,4 +123,17 @@ Response> afterRunMessagesResponse
}
}
}
+ private class ExperimentalHeaderPolicy : HttpPipelinePolicy
+ {
+ public override void Process(HttpMessage message, ReadOnlyMemory pipeline)
+ {
+ message.Request.Headers.Add("x-ms-enable-preview", "true");
+ ProcessNext(message, pipeline);
+ }
+ public override ValueTask ProcessAsync(HttpMessage message, ReadOnlyMemory pipeline)
+ {
+ message.Request.Headers.Add("x-ms-enable-preview", "true");
+ return ProcessNextAsync(message, pipeline);
+ }
+ }
}
From b7e6b504d7bef493aaf5b8182f6f411c151e2af7 Mon Sep 17 00:00:00 2001
From: nick863 <30440255+nick863@users.noreply.github.com>
Date: Mon, 25 Nov 2024 13:06:28 -0800
Subject: [PATCH 04/18] Generate code and create and example for Azure function
---
sdk/ai/Azure.AI.Projects/README.md | 78 +++++++++++++++++++
.../api/Azure.AI.Projects.net8.0.cs | 52 ++++++++++++-
.../api/Azure.AI.Projects.netstandard2.0.cs | 52 ++++++++++++-
...tion.cs => AzureFunctionToolDefinition.cs} | 20 ++---
...ureFunctionToolDefinition.Serialization.cs | 6 +-
.../Generated/AzureFunctionToolDefinition.cs | 20 +----
...lAzureFunctionDefinition.Serialization.cs} | 44 +++++------
....cs => InternalAzureFunctionDefinition.cs} | 29 +++----
.../Agent/Sample_Agent_Azure_Functions.cs | 76 +++++++++---------
sdk/ai/Azure.AI.Projects/tsp-location.yaml | 2 +-
10 files changed, 271 insertions(+), 108 deletions(-)
rename sdk/ai/Azure.AI.Projects/src/Custom/Agent/{AzureFunctionDefinition.cs => AzureFunctionToolDefinition.cs} (56%)
rename sdk/ai/Azure.AI.Projects/src/Generated/{AzureFunctionDefinition.Serialization.cs => InternalAzureFunctionDefinition.Serialization.cs} (66%)
rename sdk/ai/Azure.AI.Projects/src/Generated/{AzureFunctionDefinition.cs => InternalAzureFunctionDefinition.cs} (68%)
diff --git a/sdk/ai/Azure.AI.Projects/README.md b/sdk/ai/Azure.AI.Projects/README.md
index 289cf65ef2063..1389c37e406d1 100644
--- a/sdk/ai/Azure.AI.Projects/README.md
+++ b/sdk/ai/Azure.AI.Projects/README.md
@@ -20,6 +20,7 @@ Use the AI Projects client library to:
- [Retrieve messages](#retrieve-messages)
- [File search](#file-search)
- [Function call](#function-call)
+ - [Azure function call](#azure-function-call)
- [Troubleshooting](#troubleshooting)
- [Next steps](#next-steps)
- [Contributing](#contributing)
@@ -347,6 +348,83 @@ while (runResponse.Value.Status == RunStatus.Queued
|| runResponse.Value.Status == RunStatus.InProgress);
```
+#### Azure function call
+We also can use Azure Function from inside the agent. In the example below we are calling function "foo", which responds "Bar". In this example we create `AzureFunctionToolDefinition` object, with the function name, description, input and output queues, followed by function parameters.
+```C# Snippet:AzureFunctionsDefineFunctionTools
+AzureFunctionToolDefinition azureFnTool = new(
+ name: "foo",
+ description: "Get answers from the foo bot.",
+ inputBinding: new AzureStorageQueueBinding(
+ new AzureFunctionStorageQueue(
+ queueName: "azure-function-foo-input",
+ storageQueueUri: storageQueueUri
+ )
+ ),
+ outputBinding: new AzureStorageQueueBinding(
+ new AzureFunctionStorageQueue(
+ queueName: "azure-function-tool-output",
+ storageQueueUri: storageQueueUri
+ )
+ ),
+ parameters: BinaryData.FromObjectAsJson(
+ new
+ {
+ Type = "object",
+ Properties = new
+ {
+ query = new
+ {
+ Type = "string",
+ Description = "The question to ask.",
+ },
+ outputqueueuri = new
+ {
+ Type = "string",
+ Description = "The full output queue uri."
+ }
+ },
+ },
+ new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }
+ )
+);
+```
+
+Note that in this scenario we are asking agent to supply storage queue URI to the azure function whenever it is called.
+```C# Snippet:AzureFunctionsCreateAgentWithFunctionTools
+Response agentResponse = await client.CreateAgentAsync(
+ model: "gpt-4",
+ name: "azure-function-agent-foo",
+ instructions: "You are a helpful support agent. Use the provided function any "
+ + "time the prompt contains the string 'What would foo say?'. When you invoke "
+ + "the function, ALWAYS specify the output queue uri parameter as "
+ + $"'{storageQueueUri}/azure-function-tool-output'. Always responds with "
+ + "\"Foo says\" and then the response from the tool.",
+ tools: new List { azureFnTool }
+ );
+Agent agent = agentResponse.Value;
+```
+
+After we have created a message with request to ask "What would foo say?", we need to wait while the run is in queued, in progress or requires action states.
+```C# Snippet:AzureFunctionsHandlePollingWithRequiredAction
+Response messageResponse = await client.CreateMessageAsync(
+ thread.Id,
+ MessageRole.User,
+ "What is the most prevalent element in the universe? What would foo say?");
+ThreadMessage message = messageResponse.Value;
+
+Response runResponse = await client.CreateRunAsync(thread, agent);
+
+do
+{
+ await Task.Delay(TimeSpan.FromMilliseconds(500));
+ runResponse = await client.GetRunAsync(thread.Id, runResponse.Value.Id);
+}
+while (runResponse.Value.Status == RunStatus.Queued
+ || runResponse.Value.Status == RunStatus.InProgress
+ || runResponse.Value.Status == RunStatus.RequiresAction);
+```
+
+
## Troubleshooting
Any operation that fails will throw a [RequestFailedException][RequestFailedException]. The exception's `code` will hold the HTTP response status code. The exception's `message` contains a detailed message that may be helpful in diagnosing the issue:
diff --git a/sdk/ai/Azure.AI.Projects/api/Azure.AI.Projects.net8.0.cs b/sdk/ai/Azure.AI.Projects/api/Azure.AI.Projects.net8.0.cs
index b9ce4b3003051..f1950434b2ef4 100644
--- a/sdk/ai/Azure.AI.Projects/api/Azure.AI.Projects.net8.0.cs
+++ b/sdk/ai/Azure.AI.Projects/api/Azure.AI.Projects.net8.0.cs
@@ -609,6 +609,54 @@ protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter write
string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
}
+ public abstract partial class AzureFunctionBinding : System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
+ {
+ protected AzureFunctionBinding() { }
+ protected virtual void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionBinding System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionBinding System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ }
+ public partial class AzureFunctionStorageQueue : System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
+ {
+ public AzureFunctionStorageQueue(string storageQueueUri, string queueName) { }
+ public string QueueName { get { throw null; } set { } }
+ public string StorageQueueUri { get { throw null; } set { } }
+ protected virtual void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionStorageQueue System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionStorageQueue System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ }
+ public partial class AzureFunctionToolDefinition : Azure.AI.Projects.ToolDefinition, System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
+ {
+ public AzureFunctionToolDefinition(string name, string description, Azure.AI.Projects.AzureStorageQueueBinding inputBinding, Azure.AI.Projects.AzureStorageQueueBinding outputBinding, System.BinaryData parameters) { }
+ public string Description { get { throw null; } }
+ public string Name { get { throw null; } }
+ public System.BinaryData Parameters { get { throw null; } }
+ public override bool Equals(object obj) { throw null; }
+ public override int GetHashCode() { throw null; }
+ protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionToolDefinition System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionToolDefinition System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ }
+ public partial class AzureStorageQueueBinding : Azure.AI.Projects.AzureFunctionBinding, System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
+ {
+ public AzureStorageQueueBinding(Azure.AI.Projects.AzureFunctionStorageQueue storageQueue) { }
+ public Azure.AI.Projects.AzureFunctionStorageQueue StorageQueue { get { throw null; } set { } }
+ protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureStorageQueueBinding System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureStorageQueueBinding System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ }
public partial class BingGroundingToolDefinition : Azure.AI.Projects.ToolDefinition, System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
{
public BingGroundingToolDefinition(Azure.AI.Projects.ToolConnectionList bingGrounding) { }
@@ -1430,8 +1478,8 @@ protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter write
}
public partial class MicrosoftFabricToolDefinition : Azure.AI.Projects.ToolDefinition, System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
{
- public MicrosoftFabricToolDefinition(Azure.AI.Projects.ToolConnectionList microsoftFabric) { }
- public Azure.AI.Projects.ToolConnectionList MicrosoftFabric { get { throw null; } set { } }
+ public MicrosoftFabricToolDefinition(Azure.AI.Projects.ToolConnectionList fabricAiskill) { }
+ public Azure.AI.Projects.ToolConnectionList FabricAiskill { get { throw null; } set { } }
protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
Azure.AI.Projects.MicrosoftFabricToolDefinition System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
diff --git a/sdk/ai/Azure.AI.Projects/api/Azure.AI.Projects.netstandard2.0.cs b/sdk/ai/Azure.AI.Projects/api/Azure.AI.Projects.netstandard2.0.cs
index b9ce4b3003051..f1950434b2ef4 100644
--- a/sdk/ai/Azure.AI.Projects/api/Azure.AI.Projects.netstandard2.0.cs
+++ b/sdk/ai/Azure.AI.Projects/api/Azure.AI.Projects.netstandard2.0.cs
@@ -609,6 +609,54 @@ protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter write
string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
}
+ public abstract partial class AzureFunctionBinding : System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
+ {
+ protected AzureFunctionBinding() { }
+ protected virtual void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionBinding System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionBinding System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ }
+ public partial class AzureFunctionStorageQueue : System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
+ {
+ public AzureFunctionStorageQueue(string storageQueueUri, string queueName) { }
+ public string QueueName { get { throw null; } set { } }
+ public string StorageQueueUri { get { throw null; } set { } }
+ protected virtual void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionStorageQueue System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionStorageQueue System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ }
+ public partial class AzureFunctionToolDefinition : Azure.AI.Projects.ToolDefinition, System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
+ {
+ public AzureFunctionToolDefinition(string name, string description, Azure.AI.Projects.AzureStorageQueueBinding inputBinding, Azure.AI.Projects.AzureStorageQueueBinding outputBinding, System.BinaryData parameters) { }
+ public string Description { get { throw null; } }
+ public string Name { get { throw null; } }
+ public System.BinaryData Parameters { get { throw null; } }
+ public override bool Equals(object obj) { throw null; }
+ public override int GetHashCode() { throw null; }
+ protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionToolDefinition System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureFunctionToolDefinition System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ }
+ public partial class AzureStorageQueueBinding : Azure.AI.Projects.AzureFunctionBinding, System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
+ {
+ public AzureStorageQueueBinding(Azure.AI.Projects.AzureFunctionStorageQueue storageQueue) { }
+ public Azure.AI.Projects.AzureFunctionStorageQueue StorageQueue { get { throw null; } set { } }
+ protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureStorageQueueBinding System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
+ Azure.AI.Projects.AzureStorageQueueBinding System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
+ }
public partial class BingGroundingToolDefinition : Azure.AI.Projects.ToolDefinition, System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
{
public BingGroundingToolDefinition(Azure.AI.Projects.ToolConnectionList bingGrounding) { }
@@ -1430,8 +1478,8 @@ protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter write
}
public partial class MicrosoftFabricToolDefinition : Azure.AI.Projects.ToolDefinition, System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel
{
- public MicrosoftFabricToolDefinition(Azure.AI.Projects.ToolConnectionList microsoftFabric) { }
- public Azure.AI.Projects.ToolConnectionList MicrosoftFabric { get { throw null; } set { } }
+ public MicrosoftFabricToolDefinition(Azure.AI.Projects.ToolConnectionList fabricAiskill) { }
+ public Azure.AI.Projects.ToolConnectionList FabricAiskill { get { throw null; } set { } }
protected override void JsonModelWriteCore(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
Azure.AI.Projects.MicrosoftFabricToolDefinition System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) { throw null; }
void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) { }
diff --git a/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionDefinition.cs b/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionToolDefinition.cs
similarity index 56%
rename from sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionDefinition.cs
rename to sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionToolDefinition.cs
index 0eaf15d633719..7a264a5d15717 100644
--- a/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionDefinition.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AzureFunctionToolDefinition.cs
@@ -10,20 +10,20 @@
namespace Azure.AI.Projects
{
- [CodeGenSuppress("AzureFunctionDefinition", typeof(InternalFunctionDefinition))]
- public partial class AzureFunctionDefinition
+ [CodeGenSuppress("AzureFunctionToolDefinition", typeof(InternalAzureFunctionDefinition))]
+ public partial class AzureFunctionToolDefinition
{
///
- public string Name => InternalFunction.Name;
+ public string Name => InternalAzureFunction.Function.Name;
///
- public string Description => InternalFunction.Description;
+ public string Description => InternalAzureFunction.Function.Description;
///
- public BinaryData Parameters => InternalFunction.Parameters;
+ public BinaryData Parameters => InternalAzureFunction.Function.Parameters;
/// The definition of the function that the function tool should call.
- internal InternalFunctionDefinition InternalFunction { get; set; }
+ internal InternalAzureFunctionDefinition InternalAzureFunction { get; set; }
///
/// Initializes a new instance of AzureFunctionDefinition.
@@ -34,16 +34,16 @@ public partial class AzureFunctionDefinition
/// Output storage queue.
/// The parameters the Azure functions accepts, described as a JSON Schema object.
/// , or is null.
- public AzureFunctionDefinition(string name, string description, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding, BinaryData parameters)
- : this(new InternalFunctionDefinition(name, description, parameters, serializedAdditionalRawData: null), inputBinding: inputBinding, outputBinding: outputBinding)
+ public AzureFunctionToolDefinition(string name, string description, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding, BinaryData parameters)
+ : this(type: "azure_function", serializedAdditionalRawData: null, new InternalAzureFunctionDefinition(new InternalFunctionDefinition(name, description, parameters, serializedAdditionalRawData: null), inputBinding: inputBinding, outputBinding: outputBinding))
{
}
///
public override bool Equals(object obj)
- => (obj is AzureFunctionDefinition toolDefinition && Name == toolDefinition.Name);
+ => (obj is AzureFunctionToolDefinition toolDefinition && Name == toolDefinition.Name);
///
- public override int GetHashCode() => InternalFunction.GetHashCode();
+ public override int GetHashCode() => InternalAzureFunction.GetHashCode();
}
}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.Serialization.cs
index 0515abf2f6cf7..2e12aa3406334 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.Serialization.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.Serialization.cs
@@ -36,7 +36,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri
base.JsonModelWriteCore(writer, options);
writer.WritePropertyName("azure_function"u8);
- writer.WriteObjectValue(AzureFunction, options);
+ writer.WriteObjectValue(InternalAzureFunction, options);
}
AzureFunctionToolDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
@@ -59,7 +59,7 @@ internal static AzureFunctionToolDefinition DeserializeAzureFunctionToolDefiniti
{
return null;
}
- AzureFunctionDefinition azureFunction = default;
+ InternalAzureFunctionDefinition azureFunction = default;
string type = default;
IDictionary serializedAdditionalRawData = default;
Dictionary rawDataDictionary = new Dictionary();
@@ -67,7 +67,7 @@ internal static AzureFunctionToolDefinition DeserializeAzureFunctionToolDefiniti
{
if (property.NameEquals("azure_function"u8))
{
- azureFunction = AzureFunctionDefinition.DeserializeAzureFunctionDefinition(property.Value, options);
+ azureFunction = InternalAzureFunctionDefinition.DeserializeInternalAzureFunctionDefinition(property.Value, options);
continue;
}
if (property.NameEquals("type"u8))
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.cs b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.cs
index 1a6d339a85886..87032b76e501d 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionToolDefinition.cs
@@ -13,32 +13,18 @@ namespace Azure.AI.Projects
/// The input definition information for a azure function tool as used to configure an agent.
public partial class AzureFunctionToolDefinition : ToolDefinition
{
- /// Initializes a new instance of .
- /// The definition of the concrete function that the function tool should call.
- /// is null.
- public AzureFunctionToolDefinition(AzureFunctionDefinition azureFunction)
- {
- Argument.AssertNotNull(azureFunction, nameof(azureFunction));
-
- Type = "azure_function";
- AzureFunction = azureFunction;
- }
-
/// Initializes a new instance of .
/// The object type.
/// Keeps track of any properties unknown to the library.
- /// The definition of the concrete function that the function tool should call.
- internal AzureFunctionToolDefinition(string type, IDictionary serializedAdditionalRawData, AzureFunctionDefinition azureFunction) : base(type, serializedAdditionalRawData)
+ /// The definition of the concrete function that the function tool should call.
+ internal AzureFunctionToolDefinition(string type, IDictionary serializedAdditionalRawData, InternalAzureFunctionDefinition internalAzureFunction) : base(type, serializedAdditionalRawData)
{
- AzureFunction = azureFunction;
+ InternalAzureFunction = internalAzureFunction;
}
/// Initializes a new instance of for deserialization.
internal AzureFunctionToolDefinition()
{
}
-
- /// The definition of the concrete function that the function tool should call.
- public AzureFunctionDefinition AzureFunction { get; set; }
}
}
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.Serialization.cs b/sdk/ai/Azure.AI.Projects/src/Generated/InternalAzureFunctionDefinition.Serialization.cs
similarity index 66%
rename from sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.Serialization.cs
rename to sdk/ai/Azure.AI.Projects/src/Generated/InternalAzureFunctionDefinition.Serialization.cs
index 2bf449af09543..d5c3f8a769923 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.Serialization.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/InternalAzureFunctionDefinition.Serialization.cs
@@ -13,11 +13,11 @@
namespace Azure.AI.Projects
{
- public partial class AzureFunctionDefinition : IUtf8JsonSerializable, IJsonModel
+ internal partial class InternalAzureFunctionDefinition : IUtf8JsonSerializable, IJsonModel
{
- void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IJsonModel)this).Write(writer, ModelSerializationExtensions.WireOptions);
+ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IJsonModel)this).Write(writer, ModelSerializationExtensions.WireOptions);
- void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
+ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options)
{
writer.WriteStartObject();
JsonModelWriteCore(writer, options);
@@ -28,14 +28,14 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade
/// The client options for reading and writing models.
protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options)
{
- var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
- throw new FormatException($"The model {nameof(AzureFunctionDefinition)} does not support writing '{format}' format.");
+ throw new FormatException($"The model {nameof(InternalAzureFunctionDefinition)} does not support writing '{format}' format.");
}
writer.WritePropertyName("function"u8);
- writer.WriteObjectValue(InternalFunction, options);
+ writer.WriteObjectValue(Function, options);
writer.WritePropertyName("input_binding"u8);
writer.WriteObjectValue(InputBinding, options);
writer.WritePropertyName("output_binding"u8);
@@ -57,19 +57,19 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit
}
}
- AzureFunctionDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
+ InternalAzureFunctionDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options)
{
- var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
if (format != "J")
{
- throw new FormatException($"The model {nameof(AzureFunctionDefinition)} does not support reading '{format}' format.");
+ throw new FormatException($"The model {nameof(InternalAzureFunctionDefinition)} does not support reading '{format}' format.");
}
using JsonDocument document = JsonDocument.ParseValue(ref reader);
- return DeserializeAzureFunctionDefinition(document.RootElement, options);
+ return DeserializeInternalAzureFunctionDefinition(document.RootElement, options);
}
- internal static AzureFunctionDefinition DeserializeAzureFunctionDefinition(JsonElement element, ModelReaderWriterOptions options = null)
+ internal static InternalAzureFunctionDefinition DeserializeInternalAzureFunctionDefinition(JsonElement element, ModelReaderWriterOptions options = null)
{
options ??= ModelSerializationExtensions.WireOptions;
@@ -105,46 +105,46 @@ internal static AzureFunctionDefinition DeserializeAzureFunctionDefinition(JsonE
}
}
serializedAdditionalRawData = rawDataDictionary;
- return new AzureFunctionDefinition(function, inputBinding, outputBinding, serializedAdditionalRawData);
+ return new InternalAzureFunctionDefinition(function, inputBinding, outputBinding, serializedAdditionalRawData);
}
- BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
+ BinaryData IPersistableModel.Write(ModelReaderWriterOptions options)
{
- var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
return ModelReaderWriter.Write(this, options);
default:
- throw new FormatException($"The model {nameof(AzureFunctionDefinition)} does not support writing '{options.Format}' format.");
+ throw new FormatException($"The model {nameof(InternalAzureFunctionDefinition)} does not support writing '{options.Format}' format.");
}
}
- AzureFunctionDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options)
+ InternalAzureFunctionDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options)
{
- var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
+ var format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format;
switch (format)
{
case "J":
{
using JsonDocument document = JsonDocument.Parse(data);
- return DeserializeAzureFunctionDefinition(document.RootElement, options);
+ return DeserializeInternalAzureFunctionDefinition(document.RootElement, options);
}
default:
- throw new FormatException($"The model {nameof(AzureFunctionDefinition)} does not support reading '{options.Format}' format.");
+ throw new FormatException($"The model {nameof(InternalAzureFunctionDefinition)} does not support reading '{options.Format}' format.");
}
}
- string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
+ string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J";
/// Deserializes the model from a raw response.
/// The response to deserialize the model from.
- internal static AzureFunctionDefinition FromResponse(Response response)
+ internal static InternalAzureFunctionDefinition FromResponse(Response response)
{
using var document = JsonDocument.Parse(response.Content);
- return DeserializeAzureFunctionDefinition(document.RootElement);
+ return DeserializeInternalAzureFunctionDefinition(document.RootElement);
}
/// Convert into a .
diff --git a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs b/sdk/ai/Azure.AI.Projects/src/Generated/InternalAzureFunctionDefinition.cs
similarity index 68%
rename from sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs
rename to sdk/ai/Azure.AI.Projects/src/Generated/InternalAzureFunctionDefinition.cs
index cbd7c4bcf342d..e6d5e343ed5bc 100644
--- a/sdk/ai/Azure.AI.Projects/src/Generated/AzureFunctionDefinition.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Generated/InternalAzureFunctionDefinition.cs
@@ -11,7 +11,7 @@
namespace Azure.AI.Projects
{
/// The definition of Azure function.
- public partial class AzureFunctionDefinition
+ internal partial class InternalAzureFunctionDefinition
{
///
/// Keeps track of any properties unknown to the library.
@@ -45,39 +45,42 @@ public partial class AzureFunctionDefinition
///
private IDictionary _serializedAdditionalRawData;
- /// Initializes a new instance of .
- /// The definition of azure function and its parameters.
+ /// Initializes a new instance of .
+ /// The definition of azure function and its parameters.
/// Input storage queue.
/// Output storage queue.
- /// , or is null.
- internal AzureFunctionDefinition(InternalFunctionDefinition internalFunction, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding)
+ /// , or is null.
+ public InternalAzureFunctionDefinition(InternalFunctionDefinition function, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding)
{
- Argument.AssertNotNull(internalFunction, nameof(internalFunction));
+ Argument.AssertNotNull(function, nameof(function));
Argument.AssertNotNull(inputBinding, nameof(inputBinding));
Argument.AssertNotNull(outputBinding, nameof(outputBinding));
- InternalFunction = internalFunction;
+ Function = function;
InputBinding = inputBinding;
OutputBinding = outputBinding;
}
- /// Initializes a new instance of .
- /// The definition of azure function and its parameters.
+ /// Initializes a new instance of .
+ /// The definition of azure function and its parameters.
/// Input storage queue.
/// Output storage queue.
/// Keeps track of any properties unknown to the library.
- internal AzureFunctionDefinition(InternalFunctionDefinition internalFunction, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding, IDictionary serializedAdditionalRawData)
+ internal InternalAzureFunctionDefinition(InternalFunctionDefinition function, AzureStorageQueueBinding inputBinding, AzureStorageQueueBinding outputBinding, IDictionary serializedAdditionalRawData)
{
- InternalFunction = internalFunction;
+ Function = function;
InputBinding = inputBinding;
OutputBinding = outputBinding;
_serializedAdditionalRawData = serializedAdditionalRawData;
}
- /// Initializes a new instance of for deserialization.
- internal AzureFunctionDefinition()
+ /// Initializes a new instance of for deserialization.
+ internal InternalAzureFunctionDefinition()
{
}
+
+ /// The definition of azure function and its parameters.
+ public InternalFunctionDefinition Function { get; set; }
/// Input storage queue.
public AzureStorageQueueBinding InputBinding { get; set; }
/// Output storage queue.
diff --git a/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs b/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
index 1ed567f232fe9..22de2be4da9b4 100644
--- a/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
+++ b/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
@@ -27,43 +27,40 @@ public async Task AzureFunctionCallingExample()
AgentsClient client = new(connectionString, new DefaultAzureCredential(), clientOptions);
#region Snippet:AzureFunctionsDefineFunctionTools
- // Example of Azure Function
AzureFunctionToolDefinition azureFnTool = new(
- azureFunction: new AzureFunctionDefinition(
- name: "foo",
- description: "Get answers from the foo bot.",
- inputBinding: new AzureStorageQueueBinding(
- new AzureFunctionStorageQueue(
- queueName: "azure-function-foo-input",
- storageQueueUri: storageQueueUri
- )
- ),
- outputBinding: new AzureStorageQueueBinding(
- new AzureFunctionStorageQueue(
- queueName: "azure-function-tool-output",
- storageQueueUri: storageQueueUri
- )
- ),
- parameters: BinaryData.FromObjectAsJson(
- new
+ name: "foo",
+ description: "Get answers from the foo bot.",
+ inputBinding: new AzureStorageQueueBinding(
+ new AzureFunctionStorageQueue(
+ queueName: "azure-function-foo-input",
+ storageQueueUri: storageQueueUri
+ )
+ ),
+ outputBinding: new AzureStorageQueueBinding(
+ new AzureFunctionStorageQueue(
+ queueName: "azure-function-tool-output",
+ storageQueueUri: storageQueueUri
+ )
+ ),
+ parameters: BinaryData.FromObjectAsJson(
+ new
+ {
+ Type = "object",
+ Properties = new
{
- Type = "object",
- Properties = new
+ query = new
{
- query = new
- {
- Type = "string",
- Description = "The question to ask.",
- },
- outputqueueuri = new
- {
- Type = "string",
- Description = "The full output queue uri."
- }
+ Type = "string",
+ Description = "The question to ask.",
},
+ outputqueueuri = new
+ {
+ Type = "string",
+ Description = "The full output queue uri."
+ }
},
- new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }
- )
+ },
+ new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }
)
);
#endregion
@@ -71,10 +68,12 @@ public async Task AzureFunctionCallingExample()
#region Snippet:AzureFunctionsCreateAgentWithFunctionTools
Response agentResponse = await client.CreateAgentAsync(
model: "gpt-4",
- name: "SDK Test Agent - Functions",
- instructions: "You are a weather bot. Use the provided functions to help answer questions. "
- + "Customize your responses to the user's preferences as much as possible and use friendly "
- + "nicknames for cities whenever possible.",
+ name: "azure-function-agent-foo",
+ instructions: "You are a helpful support agent. Use the provided function any "
+ + "time the prompt contains the string 'What would foo say?'. When you invoke "
+ + "the function, ALWAYS specify the output queue uri parameter as "
+ + $"'{storageQueueUri}/azure-function-tool-output'. Always responds with "
+ + "\"Foo says\" and then the response from the tool.",
tools: new List { azureFnTool }
);
Agent agent = agentResponse.Value;
@@ -83,6 +82,7 @@ public async Task AzureFunctionCallingExample()
Response threadResponse = await client.CreateThreadAsync();
AgentThread thread = threadResponse.Value;
+ #region Snippet:AzureFunctionsHandlePollingWithRequiredAction
Response messageResponse = await client.CreateMessageAsync(
thread.Id,
MessageRole.User,
@@ -91,14 +91,14 @@ public async Task AzureFunctionCallingExample()
Response runResponse = await client.CreateRunAsync(thread, agent);
- #region Snippet:AzureFunctionsHandlePollingWithRequiredAction
do
{
await Task.Delay(TimeSpan.FromMilliseconds(500));
runResponse = await client.GetRunAsync(thread.Id, runResponse.Value.Id);
}
while (runResponse.Value.Status == RunStatus.Queued
- || runResponse.Value.Status == RunStatus.InProgress);
+ || runResponse.Value.Status == RunStatus.InProgress
+ || runResponse.Value.Status == RunStatus.RequiresAction);
#endregion
Response> afterRunMessagesResponse
diff --git a/sdk/ai/Azure.AI.Projects/tsp-location.yaml b/sdk/ai/Azure.AI.Projects/tsp-location.yaml
index 2c17cf7e39fea..76275c4ac3da5 100644
--- a/sdk/ai/Azure.AI.Projects/tsp-location.yaml
+++ b/sdk/ai/Azure.AI.Projects/tsp-location.yaml
@@ -1,4 +1,4 @@
directory: specification/ai/Azure.AI.Projects
-commit: 278d3a9448aafdc6ded4f28ff5c8a50d3abef519
+commit: d4b732b6c7f7a20c9eb1dcf68014581272e592df
repo: Azure/azure-rest-api-specs
additionalDirectories:
From 0b5b81825da9f9c896b15818217384674c6c2b80 Mon Sep 17 00:00:00 2001
From: nick863 <30440255+nick863@users.noreply.github.com>
Date: Mon, 25 Nov 2024 17:47:26 -0800
Subject: [PATCH 05/18] Fix
---
.../Samples/Agent/Sample_Agent_Azure_Functions.cs | 15 +--------------
1 file changed, 1 insertion(+), 14 deletions(-)
diff --git a/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs b/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
index 22de2be4da9b4..53987e8373d7d 100644
--- a/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
+++ b/sdk/ai/Azure.AI.Projects/tests/Samples/Agent/Sample_Agent_Azure_Functions.cs
@@ -23,7 +23,7 @@ public async Task AzureFunctionCallingExample()
var storageQueueUri = TestEnvironment.STORAGE_QUEUE_URI;
// Add experimental headers policy
AIProjectClientOptions clientOptions = new();
- clientOptions.AddPolicy(new ExperimentalHeaderPolicy(), HttpPipelinePosition.PerCall);
+ clientOptions.AddPolicy(new CustomHeadersPolicy(), HttpPipelinePosition.PerCall);
AgentsClient client = new(connectionString, new DefaultAzureCredential(), clientOptions);
#region Snippet:AzureFunctionsDefineFunctionTools
@@ -123,17 +123,4 @@ Response> afterRunMessagesResponse
}
}
}
- private class ExperimentalHeaderPolicy : HttpPipelinePolicy
- {
- public override void Process(HttpMessage message, ReadOnlyMemory pipeline)
- {
- message.Request.Headers.Add("x-ms-enable-preview", "true");
- ProcessNext(message, pipeline);
- }
- public override ValueTask ProcessAsync(HttpMessage message, ReadOnlyMemory pipeline)
- {
- message.Request.Headers.Add("x-ms-enable-preview", "true");
- return ProcessNextAsync(message, pipeline);
- }
- }
}
From 0ebd687b75cba316620efaae4f6845a2c8a34712 Mon Sep 17 00:00:00 2001
From: nick863 <30440255+nick863@users.noreply.github.com>
Date: Tue, 3 Dec 2024 17:11:31 -0800
Subject: [PATCH 06/18] Generate new code and port parallel run
---
.../src/Custom/Agent/AIClientModelFactory.cs | 2 +-
.../Custom/Agent/AgentsClient.Streaming.cs | 8 +++++--
.../src/Custom/Agent/AgentsClient.cs | 4 ++--
.../Agent/Streaming/StreamingUpdateReason.cs | 2 +-
.../Azure.AI.Projects/src/Generated/Agent.cs | 6 ++---
.../src/Generated/AgentStreamEvent.cs | 2 +-
.../src/Generated/AgentsClient.cs | 24 ++++++++++++-------
.../Generated/AzureFunctionStorageQueue.cs | 6 ++---
.../src/Generated/CreateAgentRequest.cs | 4 ++--
.../CreateRunRequest.Serialization.cs | 16 +++++++++++++
.../src/Generated/CreateRunRequest.cs | 10 +++++---
...CreateThreadAndRunRequest.Serialization.cs | 16 +++++++++++++
.../Generated/CreateThreadAndRunRequest.cs | 10 +++++---
.../InternalAzureFunctionDefinition.cs | 12 +++++-----
.../src/Generated/RunStreamEvent.cs | 2 +-
.../src/Generated/ThreadRun.Serialization.cs | 15 ++++--------
.../src/Generated/ThreadRun.cs | 14 ++++++-----
.../src/Generated/ToolDefinition.cs | 2 +-
.../src/Generated/UpdateAgentRequest.cs | 4 ++--
.../Agent/Sample_Agent_Azure_Functions.cs | 5 +---
sdk/ai/Azure.AI.Projects/tsp-location.yaml | 2 +-
21 files changed, 105 insertions(+), 61 deletions(-)
diff --git a/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AIClientModelFactory.cs b/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AIClientModelFactory.cs
index 2a226baaaad29..a7cee4f50d0ef 100644
--- a/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AIClientModelFactory.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AIClientModelFactory.cs
@@ -133,7 +133,7 @@ public static ThreadRun ThreadRun(string id = null, string threadId = null, stri
tools ??= new List();
metadata ??= new Dictionary();
- return new ThreadRun(id, @object: null, threadId, agentId, status, requiredAction, lastError, model, instructions, tools.ToList(), createdAt, expiresAt, startedAt, completedAt, cancelledAt, failedAt, incompleteDetails, usage, temperature, topP, maxPromptTokens, maxCompletionTokens, truncationStrategy, toolChoice, responseFormat, metadata, toolResources, parallelToolCalls, serializedAdditionalRawData: null);
+ return new ThreadRun(id, @object: null, threadId, agentId, status, requiredAction, lastError, model, instructions, tools.ToList(), createdAt, expiresAt, startedAt, completedAt, cancelledAt, failedAt, incompleteDetails, usage, temperature, topP, maxPromptTokens, maxCompletionTokens, truncationStrategy, toolChoice, responseFormat, metadata, toolResources, parallelToolCalls ?? true, serializedAdditionalRawData: null);
}
/// Initializes a new instance of .
diff --git a/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AgentsClient.Streaming.cs b/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AgentsClient.Streaming.cs
index 8180b0ab46968..e7a0213989de8 100644
--- a/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AgentsClient.Streaming.cs
+++ b/sdk/ai/Azure.AI.Projects/src/Custom/Agent/AgentsClient.Streaming.cs
@@ -52,12 +52,13 @@ public partial class AgentsClient
/// The strategy to use for dropping messages as the context windows moves forward.
/// Controls whether or not and which tool is called by the model.
/// Specifies the format that the model must output.
+ /// If `true` functions will run in parallel during tool use.
/// A set of up to 16 key/value pairs that can be attached to an object, used for storing additional information about that object in a structured format. Keys may be up to 64 characters in length and values may be up to 512 characters in length.
/// The cancellation token to use.
/// or is null.
/// is an empty string, and was expected to be non-empty.
#pragma warning disable AZC0015 // Unexpected client method return type.
- public virtual AsyncCollectionResult CreateRunStreamingAsync(string threadId, string assistantId, string overrideModelName = null, string overrideInstructions = null, string additionalInstructions = null, IEnumerable additionalMessages = null, IEnumerable overrideTools = null, float? temperature = null, float? topP = null, int? maxPromptTokens = null, int? maxCompletionTokens = null, TruncationObject truncationStrategy = null, BinaryData toolChoice = null, BinaryData responseFormat = null, IReadOnlyDictionary