Files
agent-framework/dotnet/samples/GettingStarted/Tools/Extensions/OpenAIAssistantChatOptionsExtensions.cs
T
Dmytro Struk fbb0fdfe0d .Net: Code interpreter tool abstraction and implementation examples (#110)
* Added code interpreter abstraction updates for OpenAI Assistants

* Updated Persistent Agents implementation based on latest changes in SDK

* Added code interpreter abstraction updates for Azure AI Persistent Agents

* Small note for OpenAI responses code interpreter

* Small update

* Fixes after merge

* Addressed PR feedback

* Small update

* Small fix

* Fix after merge
2025-07-01 14:59:51 +00:00

50 lines
1.8 KiB
C#

// Copyright (c) Microsoft. All rights reserved.
using GettingStarted.Tools.Abstractions;
using Microsoft.Extensions.AI;
using OpenAI.Assistants;
#pragma warning disable OPENAI001
namespace GettingStarted.Tools.Extensions;
/// <summary>
/// <see cref="ChatOptions"/> conversion for OpenAI Assistants.
/// When abstraction is in place, this logic should go to OpenAI Assistants SDK.
/// </summary>
internal static class OpenAIAssistantChatOptionsExtensions
{
public static ChatOptions ToOpenAIAssistantChatOptions(this ChatOptions chatOptions)
{
// File references can be added on message attachment level only and not on code interpreter tool definition level.
// Message attachment content should be non-empty.
var threadInitializationMessage = new ThreadInitializationMessage(MessageRole.User, [MessageContent.FromText("attachments")]);
var toolDefinitions = new List<ToolDefinition>();
foreach (var tool in chatOptions.Tools!)
{
if (tool is NewHostedCodeInterpreterTool codeInterpreterTool)
{
var codeInterpreterToolDefinition = new CodeInterpreterToolDefinition();
toolDefinitions.Add(codeInterpreterToolDefinition);
if (codeInterpreterTool.FileIds is { Count: > 0 })
{
foreach (var fileId in codeInterpreterTool.FileIds)
{
threadInitializationMessage.Attachments.Add(new(fileId, [codeInterpreterToolDefinition]));
}
}
}
}
var runCreationOptions = new RunCreationOptions();
runCreationOptions.AdditionalMessages.Add(threadInitializationMessage);
chatOptions.RawRepresentationFactory = (_) => runCreationOptions;
return chatOptions;
}
}