openai/openai-dotnet

Public

mirrored from https://github.com/openai/openai-dotnetAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.2.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

examples/Assistants/Example05_AssistantsWithVisionAsync.cs

78lines · modeblame

9f9f2936Jose Arriaga Maldonado2 years ago1using NUnit.Framework;
2using OpenAI.Assistants;
3using OpenAI.Files;
4using System;
5using System.ClientModel;
a330c2e7Jose Arriaga Maldonado1 years ago6using System.IO;
9f9f2936Jose Arriaga Maldonado2 years ago7using System.Threading.Tasks;
8
8cc6643fJose Arriaga Maldonado2 years ago9namespace OpenAI.Examples;
74848f8dJose Arriaga Maldonado2 years ago10
5dce104aJose Arriaga Maldonado1 years ago11// This example uses experimental APIs which are subject to change. To use experimental APIs,
12// please acknowledge their experimental status by suppressing the corresponding warning.
13#pragma warning disable OPENAI001
14
8cc6643fJose Arriaga Maldonado2 years ago15public partial class AssistantExamples
9f9f2936Jose Arriaga Maldonado2 years ago16{
17[Test]
8cc6643fJose Arriaga Maldonado2 years ago18public async Task Example05_AssistantsWithVisionAsync()
9f9f2936Jose Arriaga Maldonado2 years ago19{
20OpenAIClient openAIClient = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY"));
31c2ba63Jose Arriaga Maldonado1 years ago21OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient();
9f9f2936Jose Arriaga Maldonado2 years ago22AssistantClient assistantClient = openAIClient.GetAssistantClient();
23
19ceae44ShivangiReja1 years ago24OpenAIFile pictureOfAppleFile = await fileClient.UploadFileAsync(
e4af1691Jose Arriaga Maldonado1 years ago25Path.Combine("Assets", "images_apple.png"),
9f9f2936Jose Arriaga Maldonado2 years ago26FileUploadPurpose.Vision);
e4af1691Jose Arriaga Maldonado1 years ago27
28Uri linkToPictureOfOrange = new("https://raw.githubusercontent.com/openai/openai-dotnet/refs/heads/main/examples/Assets/images_orange.png");
9f9f2936Jose Arriaga Maldonado2 years ago29
30Assistant assistant = await assistantClient.CreateAssistantAsync(
31"gpt-4o",
32new AssistantCreationOptions()
33{
34Instructions = "When asked a question, attempt to answer very concisely. "
35+ "Prefer one-sentence answers whenever feasible."
36});
37
38AssistantThread thread = await assistantClient.CreateThreadAsync(new ThreadCreationOptions()
39{
40InitialMessages =
41{
42new ThreadInitializationMessage(
d665b61fTravis Wilson2 years ago43MessageRole.User,
9f9f2936Jose Arriaga Maldonado2 years ago44[
45"Hello, assistant! Please compare these two images for me:",
46MessageContent.FromImageFileId(pictureOfAppleFile.Id),
19ceae44ShivangiReja1 years ago47MessageContent.FromImageUri(linkToPictureOfOrange),
9f9f2936Jose Arriaga Maldonado2 years ago48]),
49}
50});
51
7bdecfd8Anne Thompson2 years ago52AsyncCollectionResult<StreamingUpdate> streamingUpdates = assistantClient.CreateRunStreamingAsync(
a330c2e7Jose Arriaga Maldonado1 years ago53thread.Id,
54assistant.Id,
9f9f2936Jose Arriaga Maldonado2 years ago55new RunCreationOptions()
56{
57AdditionalInstructions = "When possible, try to sneak in puns if you're asked to compare things.",
58});
59
60await foreach (StreamingUpdate streamingUpdate in streamingUpdates)
61{
62if (streamingUpdate.UpdateKind == StreamingUpdateReason.RunCreated)
63{
64Console.WriteLine($"--- Run started! ---");
65}
66if (streamingUpdate is MessageContentUpdate contentUpdate)
67{
68Console.Write(contentUpdate.Text);
69}
70}
71
13a9c686Jose Arriaga Maldonado1 years ago72_ = await fileClient.DeleteFileAsync(pictureOfAppleFile.Id);
a330c2e7Jose Arriaga Maldonado1 years ago73_ = await assistantClient.DeleteThreadAsync(thread.Id);
74_ = await assistantClient.DeleteAssistantAsync(assistant.Id);
9f9f2936Jose Arriaga Maldonado2 years ago75}
76}
5dce104aJose Arriaga Maldonado1 years ago77
78#pragma warning restore OPENAI001