Description
Service
OpenAI
Describe the bug
I'm trying to run CompleteChatAsync function with some messages.
one of the messages contains a FilePart of aPDF as follows:
byte[] fileBytes = Convert.FromBase64String(attachedFile.BinaryContent);
BinaryData binaryData = new BinaryData(fileBytes);
ChatMessageContentPart.CreateFilePart(binaryData, "application/pdf", attachedFile.Name));
this is the error that i get:
---> System.ClientModel.ClientResultException: HTTP 400 (invalid_request_error: invalid_value)
Parameter: messages[3].content[0].type
Invalid Value: 'file'. Supported values are: 'text', 'image_url', 'input_audio', 'refusal', and 'audio'.
at OpenAI.ClientPipelineExtensions.ProcessMessageAsync(ClientPipeline pipeline, PipelineMessage message, RequestOptions options)
at OpenAI.Chat.ChatClient.CompleteChatAsync(BinaryContent content, RequestOptions options)
at OpenAI.Chat.ChatClient.<>c__DisplayClass10_0.<b__0>d.MoveNext()
Steps to reproduce
- Create a List of messages with a message that contain ContentPart from type File via the ChatMessageContentPart.CreateFilePart.
- run CompleteChatAsync with the messages you created.
Code snippets
private IList<ChatMessage> ParseChatMessages(IList<ChatMessageDto> messagesDto) {
var messages = new List<ChatMessage>();
foreach (var messageDto in messagesDto) {
switch (messageDto.Role) {
case "user":
var contentParts = new List<ChatMessageContentPart>();
foreach (var attachedFile in messageDto.AttachedFiles) {
if (attachedFile.BinaryContent.Length > 0) {
byte[] fileBytes = Convert.FromBase64String(attachedFile.BinaryContent);
BinaryData binaryData = new BinaryData(fileBytes);
contentParts.Add(ChatMessageContentPart.CreateFilePart(
binaryData, "application/pdf", attachedFile.Name));
}
else {
contentParts.Add(ChatMessageContentPart.CreateTextPart($"Im attaching a file called: {attachedFile.Name}. You can answer based on the file content: {attachedFile.TextContent}"));
}
}
contentParts.Add(ChatMessageContentPart.CreateTextPart(messageDto.Content));
messages.Add(new UserChatMessage(contentParts));
break;
case "system":
messages.Add(new SystemChatMessage(messageDto.Content));
break;
case "assistant":
messages.Add(new AssistantChatMessage(messageDto.Content));
break;
}
}
return messages;
}
public async Task<ChatCompletion> CreateChatCompletionAsync(IList<ChatMessage> messages,
ChatCompletionOptions options) {
var completion = await _chatClient.CompleteChatAsync(messages, options);
return completion.Value;
}
OS
Mac
.NET version
net8.0
Library version
2.2.0-beta.4