Skip to content

Commit

Permalink
feat (provider/openai): send user message content as text when possib…
Browse files Browse the repository at this point in the history
…le (#1765)

Co-authored-by: minpeter <minpeter@friendli.ai>
Co-authored-by: minpeter <kali2005611@gmail.com>
  • Loading branch information
3 people authored May 30, 2024
1 parent f370fbf commit fb42e76
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 4 deletions.
5 changes: 5 additions & 0 deletions .changeset/kind-pugs-flow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@ai-sdk/openai': patch
---

feat (provider/openai): send user message content as text when possible
43 changes: 43 additions & 0 deletions packages/openai/src/convert-to-openai-chat-messages.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { convertToOpenAIChatMessages } from './convert-to-openai-chat-messages';

describe('user messages', () => {
it('should convert messages with image parts to multiple parts', async () => {
const result = convertToOpenAIChatMessages([
{
role: 'user',
content: [
{ type: 'text', text: 'Hello' },
{
type: 'image',
image: new Uint8Array([0, 1, 2, 3]),
mimeType: 'image/png',
},
],
},
]);

expect(result).toEqual([
{
role: 'user',
content: [
{ type: 'text', text: 'Hello' },
{
type: 'image_url',
image_url: { url: 'data:image/png;base64,AAECAw==' },
},
],
},
]);
});

it('should convert messages with only a text part to a string content', async () => {
const result = convertToOpenAIChatMessages([
{
role: 'user',
content: [{ type: 'text', text: 'Hello' }],
},
]);

expect(result).toEqual([{ role: 'user', content: 'Hello' }]);
});
});
6 changes: 6 additions & 0 deletions packages/openai/src/convert-to-openai-chat-messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ export function convertToOpenAIChatMessages(
}

case 'user': {
if (content.length === 1 && content[0].type === 'text') {
messages.push({ role: 'user', content: content[0].text });
break;
}

messages.push({
role: 'user',
content: content.map(part => {
Expand All @@ -38,6 +43,7 @@ export function convertToOpenAIChatMessages(
}
}),
});

break;
}

Expand Down
6 changes: 3 additions & 3 deletions packages/openai/src/openai-chat-language-model.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ describe('doGenerate', () => {

expect(await server.getRequestBodyJson()).toStrictEqual({
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: [{ type: 'text', text: 'Hello' }] }],
messages: [{ role: 'user', content: 'Hello' }],
logprobs: false,
});
});
Expand Down Expand Up @@ -298,7 +298,7 @@ describe('doGenerate', () => {

expect(await server.getRequestBodyJson()).toStrictEqual({
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: [{ type: 'text', text: 'Hello' }] }],
messages: [{ role: 'user', content: 'Hello' }],
logprobs: false,
tools: [
{
Expand Down Expand Up @@ -612,7 +612,7 @@ describe('doStream', () => {
stream: true,
stream_options: { include_usage: true },
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: [{ type: 'text', text: 'Hello' }] }],
messages: [{ role: 'user', content: 'Hello' }],
logprobs: false,
});
});
Expand Down
1 change: 0 additions & 1 deletion packages/openai/src/openai-chat-language-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,6 @@ const openAIChatResponseSchema = z.object({
finish_reason: z.string().optional().nullable(),
}),
),
object: z.literal('chat.completion'),
usage: z.object({
prompt_tokens: z.number(),
completion_tokens: z.number(),
Expand Down

0 comments on commit fb42e76

Please sign in to comment.