Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions api/OpenAI.net8.0.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public class OpenAIClient {
public virtual ChatClient GetChatClient(string model);
[Experimental("OPENAI001")]
public virtual ContainerClient GetContainerClient();
[Experimental("OPENAI001")]
public virtual ConversationClient GetConversationClient();
public virtual EmbeddingClient GetEmbeddingClient(string model);
[Experimental("OPENAI001")]
public virtual EvaluationClient GetEvaluationClient();
Expand Down Expand Up @@ -2596,6 +2598,59 @@ public class DeleteContainerResponse : IJsonModel<DeleteContainerResponse>, IPer
protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
}
namespace OpenAI.Conversations {
[Experimental("OPENAI001")]
public class ConversationClient {
protected ConversationClient();
public ConversationClient(ApiKeyCredential credential, OpenAIClientOptions options);
public ConversationClient(ApiKeyCredential credential);
public ConversationClient(AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options);
public ConversationClient(AuthenticationPolicy authenticationPolicy);
protected internal ConversationClient(ClientPipeline pipeline, OpenAIClientOptions options);
public ConversationClient(string apiKey);
[Experimental("OPENAI001")]
public Uri Endpoint { get; }
public ClientPipeline Pipeline { get; }
public virtual ClientResult CreateConversation(BinaryContent content, RequestOptions options = null);
public virtual Task<ClientResult> CreateConversationAsync(BinaryContent content, RequestOptions options = null);
public virtual ClientResult CreateConversationItems(string conversationId, BinaryContent content, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual Task<ClientResult> CreateConversationItemsAsync(string conversationId, BinaryContent content, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual ClientResult DeleteConversation(string conversationId, RequestOptions options = null);
public virtual Task<ClientResult> DeleteConversationAsync(string conversationId, RequestOptions options = null);
public virtual ClientResult DeleteConversationItem(string conversationId, string itemId, RequestOptions options = null);
public virtual Task<ClientResult> DeleteConversationItemAsync(string conversationId, string itemId, RequestOptions options = null);
public virtual ClientResult GetConversation(string conversationId, RequestOptions options = null);
public virtual Task<ClientResult> GetConversationAsync(string conversationId, RequestOptions options = null);
public virtual ClientResult GetConversationItem(string conversationId, string itemId, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual Task<ClientResult> GetConversationItemAsync(string conversationId, string itemId, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual ClientResult GetConversationItems(string conversationId, long? limit = null, string order = null, string after = null, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual Task<ClientResult> GetConversationItemsAsync(string conversationId, long? limit = null, string order = null, string after = null, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual ClientResult UpdateConversation(string conversationId, BinaryContent content, RequestOptions options = null);
public virtual Task<ClientResult> UpdateConversationAsync(string conversationId, BinaryContent content, RequestOptions options = null);
}
[Experimental("OPENAI001")]
public readonly partial struct IncludedConversationItemProperty : IEquatable<IncludedConversationItemProperty> {
public IncludedConversationItemProperty(string value);
public static IncludedConversationItemProperty CodeInterpreterCallOutputs { get; }
public static IncludedConversationItemProperty ComputerCallOutputImageUri { get; }
public static IncludedConversationItemProperty FileSearchCallResults { get; }
public static IncludedConversationItemProperty MessageInputImageUri { get; }
public static IncludedConversationItemProperty MessageOutputTextLogprobs { get; }
public static IncludedConversationItemProperty ReasoningEncryptedContent { get; }
public static IncludedConversationItemProperty WebSearchCallActionSources { get; }
public static IncludedConversationItemProperty WebSearchCallResults { get; }
public readonly bool Equals(IncludedConversationItemProperty other);
[EditorBrowsable(EditorBrowsableState.Never)]
public override readonly bool Equals(object obj);
[EditorBrowsable(EditorBrowsableState.Never)]
public override readonly int GetHashCode();
public static bool operator ==(IncludedConversationItemProperty left, IncludedConversationItemProperty right);
public static implicit operator IncludedConversationItemProperty(string value);
public static implicit operator IncludedConversationItemProperty?(string value);
public static bool operator !=(IncludedConversationItemProperty left, IncludedConversationItemProperty right);
public override readonly string ToString();
}
}
namespace OpenAI.Embeddings {
public class EmbeddingClient {
protected EmbeddingClient();
Expand Down Expand Up @@ -5792,6 +5847,7 @@ public class ResponseItem : IJsonModel<ResponseItem>, IPersistableModel<Response
public static WebSearchCallResponseItem CreateWebSearchCallItem();
protected virtual ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options);
protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options);
public static explicit operator ResponseItem(ClientResult result);
protected virtual ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options);
protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
Expand Down
52 changes: 52 additions & 0 deletions api/OpenAI.netstandard2.0.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class OpenAIClient {
public virtual BatchClient GetBatchClient();
public virtual ChatClient GetChatClient(string model);
public virtual ContainerClient GetContainerClient();
public virtual ConversationClient GetConversationClient();
public virtual EmbeddingClient GetEmbeddingClient(string model);
public virtual EvaluationClient GetEvaluationClient();
public virtual FineTuningClient GetFineTuningClient();
Expand Down Expand Up @@ -2233,6 +2234,56 @@ public class DeleteContainerResponse : IJsonModel<DeleteContainerResponse>, IPer
protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
}
namespace OpenAI.Conversations {
public class ConversationClient {
protected ConversationClient();
public ConversationClient(ApiKeyCredential credential, OpenAIClientOptions options);
public ConversationClient(ApiKeyCredential credential);
public ConversationClient(AuthenticationPolicy authenticationPolicy, OpenAIClientOptions options);
public ConversationClient(AuthenticationPolicy authenticationPolicy);
protected internal ConversationClient(ClientPipeline pipeline, OpenAIClientOptions options);
public ConversationClient(string apiKey);
public Uri Endpoint { get; }
public ClientPipeline Pipeline { get; }
public virtual ClientResult CreateConversation(BinaryContent content, RequestOptions options = null);
public virtual Task<ClientResult> CreateConversationAsync(BinaryContent content, RequestOptions options = null);
public virtual ClientResult CreateConversationItems(string conversationId, BinaryContent content, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual Task<ClientResult> CreateConversationItemsAsync(string conversationId, BinaryContent content, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual ClientResult DeleteConversation(string conversationId, RequestOptions options = null);
public virtual Task<ClientResult> DeleteConversationAsync(string conversationId, RequestOptions options = null);
public virtual ClientResult DeleteConversationItem(string conversationId, string itemId, RequestOptions options = null);
public virtual Task<ClientResult> DeleteConversationItemAsync(string conversationId, string itemId, RequestOptions options = null);
public virtual ClientResult GetConversation(string conversationId, RequestOptions options = null);
public virtual Task<ClientResult> GetConversationAsync(string conversationId, RequestOptions options = null);
public virtual ClientResult GetConversationItem(string conversationId, string itemId, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual Task<ClientResult> GetConversationItemAsync(string conversationId, string itemId, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual ClientResult GetConversationItems(string conversationId, long? limit = null, string order = null, string after = null, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual Task<ClientResult> GetConversationItemsAsync(string conversationId, long? limit = null, string order = null, string after = null, IEnumerable<IncludedConversationItemProperty> include = null, RequestOptions options = null);
public virtual ClientResult UpdateConversation(string conversationId, BinaryContent content, RequestOptions options = null);
public virtual Task<ClientResult> UpdateConversationAsync(string conversationId, BinaryContent content, RequestOptions options = null);
}
public readonly partial struct IncludedConversationItemProperty : IEquatable<IncludedConversationItemProperty> {
public IncludedConversationItemProperty(string value);
public static IncludedConversationItemProperty CodeInterpreterCallOutputs { get; }
public static IncludedConversationItemProperty ComputerCallOutputImageUri { get; }
public static IncludedConversationItemProperty FileSearchCallResults { get; }
public static IncludedConversationItemProperty MessageInputImageUri { get; }
public static IncludedConversationItemProperty MessageOutputTextLogprobs { get; }
public static IncludedConversationItemProperty ReasoningEncryptedContent { get; }
public static IncludedConversationItemProperty WebSearchCallActionSources { get; }
public static IncludedConversationItemProperty WebSearchCallResults { get; }
public readonly bool Equals(IncludedConversationItemProperty other);
[EditorBrowsable(EditorBrowsableState.Never)]
public override readonly bool Equals(object obj);
[EditorBrowsable(EditorBrowsableState.Never)]
public override readonly int GetHashCode();
public static bool operator ==(IncludedConversationItemProperty left, IncludedConversationItemProperty right);
public static implicit operator IncludedConversationItemProperty(string value);
public static implicit operator IncludedConversationItemProperty?(string value);
public static bool operator !=(IncludedConversationItemProperty left, IncludedConversationItemProperty right);
public override readonly string ToString();
}
}
namespace OpenAI.Embeddings {
public class EmbeddingClient {
protected EmbeddingClient();
Expand Down Expand Up @@ -5084,6 +5135,7 @@ public class ResponseItem : IJsonModel<ResponseItem>, IPersistableModel<Response
public static WebSearchCallResponseItem CreateWebSearchCallItem();
protected virtual ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options);
protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options);
public static explicit operator ResponseItem(ClientResult result);
protected virtual ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options);
protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options);
}
Expand Down
64 changes: 64 additions & 0 deletions examples/Conversations/Example01_ConversationProtocol.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using NUnit.Framework;
using OpenAI.Conversations;
using System;
using System.ClientModel;
using System.Text.Json;

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 void Example01_ConversationProtocol()
{
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.'"
}
]
}
"""u8.ToArray());

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

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

ClientResult getConversationItemsResult = client.GetConversationItems(conversationId);
using JsonDocument getConversationItemsResultAsJson = JsonDocument.Parse(getConversationItemsResult.GetRawResponse().Content.ToString());
string messageId = getConversationItemsResultAsJson.RootElement
.GetProperty("data"u8)[0]
.GetProperty("id"u8)
.ToString();

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

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

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

#pragma warning restore OPENAI001
65 changes: 65 additions & 0 deletions examples/Conversations/Example01_ConversationProtocolAsync.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using NUnit.Framework;
using OpenAI.Conversations;
using System;
using System.ClientModel;
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.'"
}
]
}
"""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. Conversation ID: {conversationId}");
Console.WriteLine();

ClientResult getConversationItemsResult = await client.GetConversationItemsAsync(conversationId);
using JsonDocument getConversationItemsResultAsJson = JsonDocument.Parse(getConversationItemsResult.GetRawResponse().Content.ToString());
string messageId = getConversationItemsResultAsJson.RootElement
.GetProperty("data"u8)[0]
.GetProperty("id"u8)
.ToString();

Console.WriteLine($"Message retrieved. 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: {deleted}");
Console.WriteLine();
}
}

#pragma warning restore OPENAI001
2 changes: 1 addition & 1 deletion examples/OpenAI.Examples.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace OpenAI.Examples;
public partial class VideoExamples
{
[Test]
public void Example01_VideoCreation()
public void Example01_VideoCreationProtocol()
{
// 1) Create the client
VideoClient client = new(new ApiKeyCredential(Environment.GetEnvironmentVariable("OPENAI_API_KEY")));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace OpenAI.Examples;
public partial class VideoExamples
{
[Test]
public async Task Example01_VideoCreationAsync()
public async Task Example01_VideoCreationProtocolAsync()
{
// 1) Create the client
VideoClient client = new(new ApiKeyCredential(Environment.GetEnvironmentVariable("OPENAI_API_KEY")));
Expand Down
1 change: 1 addition & 0 deletions scripts/Export-Api.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ function Invoke-GenAPI {
$content = $content -creplace "Chat\.", ""
$content = $content -creplace "Common\.", ""
$content = $content -creplace "Containers\.", ""
$content = $content -creplace "Conversations\.", ""
$content = $content -creplace "Embeddings\.", ""
$content = $content -creplace "Evals\.", ""
$content = $content -creplace "Files\.", ""
Expand Down
2 changes: 2 additions & 0 deletions specification/base/typespec/conversations/main.tsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import "./models.tsp";
import "./operations.tsp";
Loading
Loading