1- import {
1+ import { UnsupportedFunctionalityError } from '@ai-sdk/provider'
2+ import { convertToBase64 } from '@ai-sdk/provider-utils'
3+
4+ import type { OpenAICompatibleChatPrompt } from './openai-compatible-api-types'
5+ import type {
26 LanguageModelV2Prompt ,
37 SharedV2ProviderMetadata ,
4- UnsupportedFunctionalityError ,
5- } from '@ai-sdk/provider' ;
6- import { OpenAICompatibleChatPrompt } from './openai-compatible-api-types' ;
7- import { convertToBase64 } from '@ai-sdk/provider-utils' ;
8+ } from '@ai-sdk/provider'
89
910function getOpenAIMetadata ( message : {
10- providerOptions ?: SharedV2ProviderMetadata ;
11+ providerOptions ?: SharedV2ProviderMetadata
1112} ) {
12- return message ?. providerOptions ?. openaiCompatible ?? { } ;
13+ return message ?. providerOptions ?. openaiCompatible ?? { }
1314}
1415
1516export function convertToOpenAICompatibleChatMessages (
1617 prompt : LanguageModelV2Prompt ,
1718) : OpenAICompatibleChatPrompt {
18- const messages : OpenAICompatibleChatPrompt = [ ] ;
19+ const messages : OpenAICompatibleChatPrompt = [ ]
1920 for ( const { role, content, ...message } of prompt ) {
20- const metadata = getOpenAIMetadata ( { ...message } ) ;
21+ const metadata = getOpenAIMetadata ( { ...message } )
2122 switch ( role ) {
2223 case 'system' : {
23- messages . push ( { role : 'system' , content, ...metadata } ) ;
24- break ;
24+ messages . push ( { role : 'system' , content, ...metadata } )
25+ break
2526 }
2627
2728 case 'user' : {
@@ -30,24 +31,22 @@ export function convertToOpenAICompatibleChatMessages(
3031 role : 'user' ,
3132 content : content [ 0 ] . text ,
3233 ...getOpenAIMetadata ( content [ 0 ] ) ,
33- } ) ;
34- break ;
34+ } )
35+ break
3536 }
3637
3738 messages . push ( {
3839 role : 'user' ,
39- content : content . map ( part => {
40- const partMetadata = getOpenAIMetadata ( part ) ;
40+ content : content . map ( ( part ) => {
41+ const partMetadata = getOpenAIMetadata ( part )
4142 switch ( part . type ) {
4243 case 'text' : {
43- return { type : 'text' , text : part . text , ...partMetadata } ;
44+ return { type : 'text' , text : part . text , ...partMetadata }
4445 }
4546 case 'file' : {
4647 if ( part . mediaType . startsWith ( 'image/' ) ) {
4748 const mediaType =
48- part . mediaType === 'image/*'
49- ? 'image/jpeg'
50- : part . mediaType ;
49+ part . mediaType === 'image/*' ? 'image/jpeg' : part . mediaType
5150
5251 return {
5352 type : 'image_url' ,
@@ -58,35 +57,35 @@ export function convertToOpenAICompatibleChatMessages(
5857 : `data:${ mediaType } ;base64,${ convertToBase64 ( part . data ) } ` ,
5958 } ,
6059 ...partMetadata ,
61- } ;
60+ }
6261 } else {
6362 throw new UnsupportedFunctionalityError ( {
6463 functionality : `file part media type ${ part . mediaType } ` ,
65- } ) ;
64+ } )
6665 }
6766 }
6867 }
6968 } ) ,
7069 ...metadata ,
71- } ) ;
70+ } )
7271
73- break ;
72+ break
7473 }
7574
7675 case 'assistant' : {
77- let text = '' ;
76+ let text = ''
7877 const toolCalls : Array < {
79- id : string ;
80- type : 'function' ;
81- function : { name : string ; arguments : string } ;
82- } > = [ ] ;
78+ id : string
79+ type : 'function'
80+ function : { name : string ; arguments : string }
81+ } > = [ ]
8382
8483 for ( const part of content ) {
85- const partMetadata = getOpenAIMetadata ( part ) ;
84+ const partMetadata = getOpenAIMetadata ( part )
8685 switch ( part . type ) {
8786 case 'text' : {
88- text += part . text ;
89- break ;
87+ text += part . text
88+ break
9089 }
9190 case 'tool-call' : {
9291 toolCalls . push ( {
@@ -97,8 +96,8 @@ export function convertToOpenAICompatibleChatMessages(
9796 arguments : JSON . stringify ( part . input ) ,
9897 } ,
9998 ...partMetadata ,
100- } ) ;
101- break ;
99+ } )
100+ break
102101 }
103102 }
104103 }
@@ -108,45 +107,45 @@ export function convertToOpenAICompatibleChatMessages(
108107 content : text ,
109108 tool_calls : toolCalls . length > 0 ? toolCalls : undefined ,
110109 ...metadata ,
111- } ) ;
110+ } )
112111
113- break ;
112+ break
114113 }
115114
116115 case 'tool' : {
117116 for ( const toolResponse of content ) {
118- const output = toolResponse . output ;
117+ const output = toolResponse . output
119118
120- let contentValue : string ;
119+ let contentValue : string
121120 switch ( output . type ) {
122121 case 'text' :
123122 case 'error-text' :
124- contentValue = output . value ;
125- break ;
123+ contentValue = output . value
124+ break
126125 case 'content' :
127126 case 'json' :
128127 case 'error-json' :
129- contentValue = JSON . stringify ( output . value ) ;
130- break ;
128+ contentValue = JSON . stringify ( output . value )
129+ break
131130 }
132131
133- const toolResponseMetadata = getOpenAIMetadata ( toolResponse ) ;
132+ const toolResponseMetadata = getOpenAIMetadata ( toolResponse )
134133 messages . push ( {
135134 role : 'tool' ,
136135 tool_call_id : toolResponse . toolCallId ,
137136 content : contentValue ,
138137 ...toolResponseMetadata ,
139- } ) ;
138+ } )
140139 }
141- break ;
140+ break
142141 }
143142
144143 default : {
145- const _exhaustiveCheck : never = role ;
146- throw new Error ( `Unsupported role: ${ _exhaustiveCheck } ` ) ;
144+ const _exhaustiveCheck : never = role
145+ throw new Error ( `Unsupported role: ${ _exhaustiveCheck } ` )
147146 }
148147 }
149148 }
150149
151- return messages ;
150+ return messages
152151}
0 commit comments