Skip to content

Bug - CompleteChatAsync with PDF FilePart in a content of a message #393

Open
@meyron-island

Description

@meyron-island

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

  1. Create a List of messages with a message that contain ContentPart from type File via the ChatMessageContentPart.CreateFilePart.
  2. 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

Metadata

Metadata

Assignees

Labels

questionFurther information is requested

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions