openai/openai-dotnet

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.1.0

Branches

Tags

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

Clone

HTTPS

Download ZIP

examples/Assistants/Example05_AssistantsWithVisionAsync.cs

74lines · 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
8cc6643fJose Arriaga Maldonado2 years ago11public partial class AssistantExamples
9f9f2936Jose Arriaga Maldonado2 years ago12{
13[Test]
8cc6643fJose Arriaga Maldonado2 years ago14public async Task Example05_AssistantsWithVisionAsync()
9f9f2936Jose Arriaga Maldonado2 years ago15{
16// Assistants is a beta API and subject to change; acknowledge its experimental status by suppressing the matching warning.
a330c2e7Jose Arriaga Maldonado1 years ago17#pragma warning disable OPENAI001
9f9f2936Jose Arriaga Maldonado2 years ago18OpenAIClient openAIClient = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY"));
31c2ba63Jose Arriaga Maldonado1 years ago19OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient();
9f9f2936Jose Arriaga Maldonado2 years ago20AssistantClient assistantClient = openAIClient.GetAssistantClient();
21
19ceae44ShivangiReja1 years ago22OpenAIFile pictureOfAppleFile = await fileClient.UploadFileAsync(
e4af1691Jose Arriaga Maldonado1 years ago23Path.Combine("Assets", "images_apple.png"),
9f9f2936Jose Arriaga Maldonado2 years ago24FileUploadPurpose.Vision);
e4af1691Jose Arriaga Maldonado1 years ago25
26Uri linkToPictureOfOrange = new("https://raw.githubusercontent.com/openai/openai-dotnet/refs/heads/main/examples/Assets/images_orange.png");
9f9f2936Jose Arriaga Maldonado2 years ago27
28Assistant assistant = await assistantClient.CreateAssistantAsync(
29"gpt-4o",
30new AssistantCreationOptions()
31{
32Instructions = "When asked a question, attempt to answer very concisely. "
33+ "Prefer one-sentence answers whenever feasible."
34});
35
36AssistantThread thread = await assistantClient.CreateThreadAsync(new ThreadCreationOptions()
37{
38InitialMessages =
39{
40new ThreadInitializationMessage(
d665b61fTravis Wilson2 years ago41MessageRole.User,
9f9f2936Jose Arriaga Maldonado2 years ago42[
43"Hello, assistant! Please compare these two images for me:",
44MessageContent.FromImageFileId(pictureOfAppleFile.Id),
19ceae44ShivangiReja1 years ago45MessageContent.FromImageUri(linkToPictureOfOrange),
9f9f2936Jose Arriaga Maldonado2 years ago46]),
47}
48});
49
7bdecfd8Anne Thompson2 years ago50AsyncCollectionResult<StreamingUpdate> streamingUpdates = assistantClient.CreateRunStreamingAsync(
a330c2e7Jose Arriaga Maldonado1 years ago51thread.Id,
52assistant.Id,
9f9f2936Jose Arriaga Maldonado2 years ago53new RunCreationOptions()
54{
55AdditionalInstructions = "When possible, try to sneak in puns if you're asked to compare things.",
56});
57
58await foreach (StreamingUpdate streamingUpdate in streamingUpdates)
59{
60if (streamingUpdate.UpdateKind == StreamingUpdateReason.RunCreated)
61{
62Console.WriteLine($"--- Run started! ---");
63}
64if (streamingUpdate is MessageContentUpdate contentUpdate)
65{
66Console.Write(contentUpdate.Text);
67}
68}
69
13a9c686Jose Arriaga Maldonado1 years ago70_ = await fileClient.DeleteFileAsync(pictureOfAppleFile.Id);
a330c2e7Jose Arriaga Maldonado1 years ago71_ = await assistantClient.DeleteThreadAsync(thread.Id);
72_ = await assistantClient.DeleteAssistantAsync(assistant.Id);
9f9f2936Jose Arriaga Maldonado2 years ago73}
74}