docs/decisions/0026-file-service.md
OpenAI provides a file service for uploading files to be used for assistant retrieval or model fine-tuning: https://api.openai.com/v1/files
Other providers may also offer some type of file-service, such as Gemini.
Note: Azure Open AI does not currently support the OpenAI file service API.
Microsoft.SemanticKernel.Experimental.AgentsOption 3. Add OpenAI file service support without abstraction Mark code as experimental using label:
SKEXP0010
Defining a generalized file service interface provides an extensibility point for other vendors, in addition to OpenAI.
Microsoft.SemanticKernel.Experimental.AgentsPro:
Con:
Pro:
Con:
Pro:
Con:
Note:
BinaryContentobject able to provide eitherBinaryDataorStreamregardless of which constructor is invoked.
Microsoft.SemanticKernel.Abstractionsnamespace Microsoft.SemanticKernel;
/// <summary>
/// Represents binary content.
/// </summary>
public sealed class BinaryContent : KernelContent
{
public BinaryContent(
BinaryData content,
string? modelId = null,
object? innerContent = null,
IReadOnlyDictionary<string, object?>? metadata = null);
public BinaryContent(
Func<Stream> streamProvider,
string? modelId = null,
object? innerContent = null,
IReadOnlyDictionary<string, object?>? metadata = null);
public Task<BinaryData> GetContentAsync();
public Task<Stream> GetStreamAsync();
}
Microsoft.SemanticKernel.Connectors.OpenAInamespace Microsoft.SemanticKernel.Connectors.OpenAI;
public sealed class OpenAIFileService
{
public async Task<OpenAIFileReference> GetFileAsync(
string id,
CancellationToken cancellationToken = default);
public async Task<IEnumerable<OpenAIFileReference>> GetFilesAsync(CancellationToken cancellationToken = default);
public async Task<BinaryContent> GetFileContentAsync(
string id,
CancellationToken cancellationToken = default);
public async Task DeleteFileAsync(
string id,
CancellationToken cancellationToken = default);
public async Task<OpenAIFileReference> UploadContentAsync(
BinaryContent content,
OpenAIFileUploadExecutionSettings settings,
CancellationToken cancellationToken = default);
}
public sealed class OpenAIFileUploadExecutionSettings
{
public string FileName { get; }
public OpenAIFilePurpose Purpose { get; }
}
public sealed class OpenAIFileReference
{
public string Id { get; set; }
public DateTime CreatedTimestamp { get; set; }
public string FileName { get; set; }
public OpenAIFilePurpose Purpose { get; set; }
public int SizeInBytes { get; set; }
}
public enum OpenAIFilePurpose
{
Assistants,
Finetuning,
}