openai/openai-dotnet

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.10.0

Branches

Tags

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

Clone

HTTPS

Download ZIP

examples/Conversations/Example01_ConversationProtocolAsync.cs

77lines · modepreview

using NUnit.Framework;
using OpenAI.Conversations;
using System;
using System.ClientModel;
using System.ClientModel.Primitives;
using System.Text.Json;
using System.Threading.Tasks;

namespace OpenAI.Examples;

// This example uses experimental APIs which are subject to change. To use experimental APIs,
// please acknowledge their experimental status by suppressing the corresponding warning.
#pragma warning disable OPENAI001

public partial class ConversationExamples
{
    [Test]
    public async Task Example01_ConversationProtocolAsync()
    {
        ConversationClient client = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY"));

        BinaryData createConversationParameters = BinaryData.FromBytes("""
            {
               "metadata": { "topic": "test" },
               "items": [
                   {
                       "type": "message",
                       "role": "user",
                       "content": "Say 'this is a test.'"
                   },
                   {
                       "type": "message",
                       "role": "assistant",
                       "content": "This is a test."
                   }
               ]
            }
            """u8.ToArray());

        using BinaryContent createConversationRequestContent = BinaryContent.Create(createConversationParameters);
        ClientResult createConversationResult = await client.CreateConversationAsync(createConversationRequestContent);
        using JsonDocument createConversationResultAsJson = JsonDocument.Parse(createConversationResult.GetRawResponse().Content.ToString());
        string conversationId = createConversationResultAsJson.RootElement
            .GetProperty("id"u8)
            .GetString();

        Console.WriteLine($"Conversation created.");
        Console.WriteLine($"    Conversation ID: {conversationId}");
        Console.WriteLine();

        AsyncCollectionResult getConversationItemsResults = client.GetConversationItemsAsync(conversationId);
        await foreach(ClientResult result in getConversationItemsResults.GetRawPagesAsync())
        {
            using JsonDocument getConversationItemsResultAsJson = JsonDocument.Parse(result.GetRawResponse().Content.ToString());
            foreach (JsonElement element in getConversationItemsResultAsJson.RootElement.GetProperty("data").EnumerateArray())
            {
                string messageId = element.GetProperty("id"u8).ToString();

                Console.WriteLine($"Message retrieved.");
                Console.WriteLine($"    Message ID: {messageId}");
                Console.WriteLine();
            }
        }

        ClientResult deleteConversationResult = await client.DeleteConversationAsync(conversationId);
        using JsonDocument deleteConversationResultAsJson = JsonDocument.Parse(deleteConversationResult.GetRawResponse().Content.ToString());
        bool deleted = deleteConversationResultAsJson.RootElement
            .GetProperty("deleted"u8)
            .GetBoolean();

        Console.WriteLine($"Conversation deleted.");
        Console.WriteLine($"    Deleted: {deleted}");
        Console.WriteLine();
    }
}

#pragma warning restore OPENAI001