.Net: FileSearch Tool Sample + API Proposal Updates for MEAI.Abstractions/Azure.AI.Agents (#210)

* Wip, bringing persistent chat client back

* Bring back code interpreter resource logic

* Add file search samples and proposal for new OpenAIAssistantChatClient and AgentPersistantChatCLient

* Update dotnet/samples/GettingStarted/External/MEAI.Abstractions/NewHostedFileSearchTool.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update dotnet/samples/GettingStarted/Steps/Step04_ChatClientAgent_UsingFileSearchTools.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update dotnet/samples/GettingStarted/External/Azure.AI.Agents.Persistent/NewPersistentAgentsChatClient.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update MEAI abstractions to reflect latest discussions, updated underlying chatclients

* Remove unneeded comments

* Address PR feedback

* Address PR feedback

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Roger Barreto
2025-07-29 11:41:35 +01:00
committed by GitHub
Unverified
parent dff700e469
commit 02814a4fc0
10 changed files with 881 additions and 39 deletions
@@ -1,8 +1,6 @@
// Copyright (c) Microsoft. All rights reserved.
using Microsoft.Extensions.AI;
namespace OpenAI.Assistants;
namespace Microsoft.Extensions.AI;
/// <summary>
/// Proposal for abstraction updates based on the common code interpreter tool properties.
@@ -10,26 +8,11 @@ namespace OpenAI.Assistants;
/// </summary>
public class NewHostedCodeInterpreterTool : HostedCodeInterpreterTool
{
// Usage of an internal dictionary is temporary and only used here because the MEAI.Abstractions does not have this specialization yet and the
// ChatClients must rely on the AdditionalProperties to check and set correctly the Code Interpreter Resource avoiding a customized RawRepresentationFactory implementation.
private readonly Dictionary<string, object?> _additionalProperties = [];
/// <summary>Gets or sets the list of file IDs that the code interpreter tool can access.</summary>
public IList<string> FileIds
{
get
{
// Only create the property in the dictionary when it is actually used
if (!this._additionalProperties.TryGetValue("fileIds", out var value) || value is null)
{
value = new List<string>();
this._additionalProperties["fileIds"] = value;
}
return (IList<string>)value;
}
}
/// <inheritdoc/>
public override IReadOnlyDictionary<string, object?> AdditionalProperties => this._additionalProperties;
/// <summary>Gets or sets a collection of <see cref="AIContent"/> to be used as input to the code interpreter tool.</summary>
/// <remarks>
/// Services support different varied kinds of inputs. Most support the IDs of files that are hosted by the service,
/// represented via <see cref="HostedFileContent"/>. Some also support binary data, represented via <see cref="DataContent"/>.
/// Unsupported inputs will be ignored by the <see cref="IChatClient"/> to which the tool is passed.
/// </remarks>
public IList<AIContent>? Inputs { get; set; }
}