openai
openai copied to clipboard
Compatibility with Older APIs (with `String` content)
Description
In the recent update to the dart_openai library (version 5.0.0), the content field in the request body has been changed from String to List<Object>. While this change aligns with OpenAI's latest API updates, it causes compatibility issues with other large model APIs that still expect content to be a String.
Impact
This change prevents users from easily migrating to or using other large model APIs that follow the original OpenAI API format. As a result, users who rely on these APIs are facing difficulties in integrating with the updated dart_openai library. Specifically, the following error is encountered:
Failed to deserialize the JSON body into the target type: messages[1]: invalid type: sequence, expected a string at line 6 column 9
Suggested Solution
To maintain compatibility and ease of migration, I suggest the following:
- Provide an option to use either
Stringfield. - Introduce a compatibility mode or a configuration setting that allows users to specify the format of the
contentfield.
Example Code
Here is an example of how the library could support both formats: (something like this, I'm a newbie in Dart)
final dynamic content; // Can be either String or List<Object>
// When sending the request
if (content is List<Object>) {
// Handle List<Object> format
} else if (content is String) {
// Handle String format
}
This approach would ensure that users can continue to use the library with other large model APIs without any issues.
Additional Context
- The latest version of
dart_openaiis 5.0.0. - The last version that used
Stringwas 4.1.2, and the commit.
I sinicerely hope you can consider this suggestion.
Thank you!
openai_dart supports both:
String:
ChatCompletionMessage.user(
content: ChatCompletionUserMessageContent.string('Hello!'),
),
Or parts for multi-modal:
ChatCompletionMessage.user(
content: ChatCompletionUserMessageContent.parts(
[
ChatCompletionMessageContentPart.text(
text: 'What fruit is this?',
),
ChatCompletionMessageContentPart.image(
imageUrl: ChatCompletionMessageImageUrl(
url: 'https://upload.wikimedia.org/wikipedia/commons/9/92/95apple.jpeg',
),
),
],
),
),