Skip to content

Commit 48d8b92

Browse files
authored
Merge pull request #824 from narengogi/chore/support-developer-role
support new openai developer role
2 parents 56d0e65 + 71c1d23 commit 48d8b92

File tree

28 files changed

+188
-23
lines changed

28 files changed

+188
-23
lines changed

src/providers/ai21/chatComplete.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { AI21 } from '../../globals';
2-
import { Params } from '../../types/requestBody';
2+
import { Params, SYSTEM_MESSAGE_ROLES } from '../../types/requestBody';
33
import {
44
ChatCompletionResponse,
55
ErrorResponse,
@@ -19,7 +19,10 @@ export const AI21ChatCompleteConfig: ProviderConfig = {
1919
transform: (params: Params) => {
2020
let inputMessages: any = [];
2121

22-
if (params.messages?.[0]?.role === 'system') {
22+
if (
23+
params.messages?.[0]?.role &&
24+
SYSTEM_MESSAGE_ROLES.includes(params.messages?.[0]?.role)
25+
) {
2326
inputMessages = params.messages.slice(1);
2427
} else if (params.messages) {
2528
inputMessages = params.messages;
@@ -35,7 +38,10 @@ export const AI21ChatCompleteConfig: ProviderConfig = {
3538
param: 'system',
3639
required: false,
3740
transform: (params: Params) => {
38-
if (params.messages?.[0].role === 'system') {
41+
if (
42+
params.messages?.[0]?.role &&
43+
SYSTEM_MESSAGE_ROLES.includes(params.messages?.[0]?.role)
44+
) {
3945
return params.messages?.[0].content;
4046
}
4147
},

src/providers/anthropic/chatComplete.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
Message,
55
ContentType,
66
AnthropicPromptCache,
7+
SYSTEM_MESSAGE_ROLES,
78
} from '../../types/requestBody';
89
import {
910
ChatCompletionResponse,
@@ -111,7 +112,7 @@ export const AnthropicChatCompleteConfig: ProviderConfig = {
111112
// Transform the chat messages into a simple prompt
112113
if (!!params.messages) {
113114
params.messages.forEach((msg: Message & AnthropicPromptCache) => {
114-
if (msg.role === 'system') return;
115+
if (SYSTEM_MESSAGE_ROLES.includes(msg.role)) return;
115116

116117
if (msg.role === 'assistant') {
117118
messages.push(transformAssistantMessage(msg));
@@ -188,7 +189,7 @@ export const AnthropicChatCompleteConfig: ProviderConfig = {
188189
if (!!params.messages) {
189190
params.messages.forEach((msg: Message & AnthropicPromptCache) => {
190191
if (
191-
msg.role === 'system' &&
192+
SYSTEM_MESSAGE_ROLES.includes(msg.role) &&
192193
msg.content &&
193194
typeof msg.content === 'object' &&
194195
msg.content[0].text
@@ -203,7 +204,7 @@ export const AnthropicChatCompleteConfig: ProviderConfig = {
203204
});
204205
});
205206
} else if (
206-
msg.role === 'system' &&
207+
SYSTEM_MESSAGE_ROLES.includes(msg.role) &&
207208
typeof msg.content === 'string'
208209
) {
209210
systemMessages.push({

src/providers/anyscale/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ANYSCALE } from '../../globals';
2+
import { Params } from '../../types/requestBody';
23
import {
34
ChatCompletionResponse,
45
ErrorResponse,
@@ -20,6 +21,12 @@ export const AnyscaleChatCompleteConfig: ProviderConfig = {
2021
messages: {
2122
param: 'messages',
2223
default: '',
24+
transform: (params: Params) => {
25+
return params.messages?.map((message) => {
26+
if (message.role === 'developer') return { ...message, role: 'system' };
27+
return message;
28+
});
29+
},
2330
},
2431
functions: {
2532
param: 'functions',

src/providers/azure-ai-inference/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Params } from '../../types/requestBody';
12
import { OpenAIErrorResponseTransform } from '../openai/utils';
23
import {
34
ChatCompletionResponse,
@@ -14,6 +15,12 @@ export const AzureAIInferenceChatCompleteConfig: ProviderConfig = {
1415
messages: {
1516
param: 'messages',
1617
default: '',
18+
transform: (params: Params) => {
19+
return params.messages?.map((message) => {
20+
if (message.role === 'developer') return { ...message, role: 'system' };
21+
return message;
22+
});
23+
},
1724
},
1825
max_tokens: {
1926
param: 'max_tokens',

src/providers/bedrock/chatComplete.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { BEDROCK, documentMimeTypes, imagesMimeTypes } from '../../globals';
2-
import { Message, Params, ToolCall } from '../../types/requestBody';
2+
import {
3+
Message,
4+
Params,
5+
ToolCall,
6+
SYSTEM_MESSAGE_ROLES,
7+
} from '../../types/requestBody';
38
import {
49
ChatCompletionResponse,
510
ErrorResponse,
@@ -150,7 +155,7 @@ export const BedrockConverseChatCompleteConfig: ProviderConfig = {
150155
transform: (params: BedrockChatCompletionsParams) => {
151156
if (!params.messages) return [];
152157
const transformedMessages = params.messages
153-
.filter((msg) => msg.role !== 'system')
158+
.filter((msg) => !SYSTEM_MESSAGE_ROLES.includes(msg.role))
154159
.map((msg) => {
155160
return {
156161
role: msg.role === 'assistant' ? 'assistant' : 'user',
@@ -183,7 +188,7 @@ export const BedrockConverseChatCompleteConfig: ProviderConfig = {
183188
if (!params.messages) return;
184189
const systemMessages = params.messages.reduce(
185190
(acc: { text: string }[], msg) => {
186-
if (msg.role === 'system')
191+
if (SYSTEM_MESSAGE_ROLES.includes(msg.role))
187192
return acc.concat(...getMessageTextContentArray(msg));
188193
return acc;
189194
},
@@ -603,7 +608,7 @@ export const BedrockCohereChatCompleteConfig: ProviderConfig = {
603608
if (!!params.messages) {
604609
let messages: Message[] = params.messages;
605610
messages.forEach((msg, index) => {
606-
if (index === 0 && msg.role === 'system') {
611+
if (index === 0 && SYSTEM_MESSAGE_ROLES.includes(msg.role)) {
607612
prompt += `system: ${messages}\n`;
608613
} else if (msg.role == 'user') {
609614
prompt += `user: ${msg.content}\n`;
@@ -787,7 +792,7 @@ export const BedrockAI21ChatCompleteConfig: ProviderConfig = {
787792
if (!!params.messages) {
788793
let messages: Message[] = params.messages;
789794
messages.forEach((msg, index) => {
790-
if (index === 0 && msg.role === 'system') {
795+
if (index === 0 && SYSTEM_MESSAGE_ROLES.includes(msg.role)) {
791796
prompt += `system: ${messages}\n`;
792797
} else if (msg.role == 'user') {
793798
prompt += `user: ${msg.content}\n`;

src/providers/deepbricks/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { DEEPBRICKS } from '../../globals';
2+
import { Params } from '../../types/requestBody';
23
import {
34
ChatCompletionResponse,
45
ErrorResponse,
@@ -17,6 +18,12 @@ export const DeepbricksChatCompleteConfig: ProviderConfig = {
1718
messages: {
1819
param: 'messages',
1920
default: '',
21+
transform: (params: Params) => {
22+
return params.messages?.map((message) => {
23+
if (message.role === 'developer') return { ...message, role: 'system' };
24+
return message;
25+
});
26+
},
2027
},
2128
functions: {
2229
param: 'functions',

src/providers/deepinfra/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { DEEPINFRA } from '../../globals';
2+
import { Params } from '../../types/requestBody';
23
import {
34
ChatCompletionResponse,
45
ErrorResponse,
@@ -22,6 +23,12 @@ export const DeepInfraChatCompleteConfig: ProviderConfig = {
2223
param: 'messages',
2324
required: true,
2425
default: [],
26+
transform: (params: Params) => {
27+
return params.messages?.map((message) => {
28+
if (message.role === 'developer') return { ...message, role: 'system' };
29+
return message;
30+
});
31+
},
2532
},
2633
frequency_penalty: {
2734
param: 'frequency_penalty',

src/providers/deepseek/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { DEEPSEEK } from '../../globals';
2+
import { Params } from '../../types/requestBody';
23

34
import {
45
ChatCompletionResponse,
@@ -19,6 +20,12 @@ export const DeepSeekChatCompleteConfig: ProviderConfig = {
1920
messages: {
2021
param: 'messages',
2122
default: '',
23+
transform: (params: Params) => {
24+
return params.messages?.map((message) => {
25+
if (message.role === 'developer') return { ...message, role: 'system' };
26+
return message;
27+
});
28+
},
2229
},
2330
max_tokens: {
2431
param: 'max_tokens',

src/providers/fireworks-ai/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { FIREWORKS_AI } from '../../globals';
2+
import { Params } from '../../types/requestBody';
23
import {
34
ChatCompletionResponse,
45
ErrorResponse,
@@ -19,6 +20,12 @@ export const FireworksAIChatCompleteConfig: ProviderConfig = {
1920
param: 'messages',
2021
required: true,
2122
default: [],
23+
transform: (params: Params) => {
24+
return params.messages?.map((message) => {
25+
if (message.role === 'developer') return { ...message, role: 'system' };
26+
return message;
27+
});
28+
},
2229
},
2330
tools: {
2431
param: 'tools',

src/providers/google-vertex-ai/chatComplete.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
Params,
99
Tool,
1010
ToolCall,
11+
SYSTEM_MESSAGE_ROLES,
1112
} from '../../types/requestBody';
1213
import {
1314
AnthropicChatCompleteResponse,
@@ -71,7 +72,7 @@ export const VertexGoogleChatCompleteConfig: ProviderConfig = {
7172
// From gemini-1.5 onwards, systemInstruction is supported
7273
// Skipping system message and sending it in systemInstruction for gemini 1.5 models
7374
if (
74-
message.role === 'system' &&
75+
SYSTEM_MESSAGE_ROLES.includes(message.role) &&
7576
!SYSTEM_INSTRUCTION_DISABLED_MODELS.includes(params.model as string)
7677
)
7778
return;
@@ -186,7 +187,7 @@ export const VertexGoogleChatCompleteConfig: ProviderConfig = {
186187
if (!firstMessage) return;
187188

188189
if (
189-
firstMessage.role === 'system' &&
190+
SYSTEM_MESSAGE_ROLES.includes(firstMessage.role) &&
190191
typeof firstMessage.content === 'string'
191192
) {
192193
return {
@@ -200,7 +201,7 @@ export const VertexGoogleChatCompleteConfig: ProviderConfig = {
200201
}
201202

202203
if (
203-
firstMessage.role === 'system' &&
204+
SYSTEM_MESSAGE_ROLES.includes(firstMessage.role) &&
204205
typeof firstMessage.content === 'object' &&
205206
firstMessage.content?.[0]?.text
206207
) {
@@ -413,7 +414,7 @@ export const VertexAnthropicChatCompleteConfig: ProviderConfig = {
413414
// Transform the chat messages into a simple prompt
414415
if (!!params.messages) {
415416
params.messages.forEach((msg) => {
416-
if (msg.role === 'system') return;
417+
if (SYSTEM_MESSAGE_ROLES.includes(msg.role)) return;
417418

418419
if (msg.role === 'assistant') {
419420
messages.push(transformAssistantMessageForAnthropic(msg));
@@ -481,14 +482,14 @@ export const VertexAnthropicChatCompleteConfig: ProviderConfig = {
481482
if (!!params.messages) {
482483
params.messages.forEach((msg) => {
483484
if (
484-
msg.role === 'system' &&
485+
SYSTEM_MESSAGE_ROLES.includes(msg.role) &&
485486
msg.content &&
486487
typeof msg.content === 'object' &&
487488
msg.content[0].text
488489
) {
489490
systemMessage = msg.content[0].text;
490491
} else if (
491-
msg.role === 'system' &&
492+
SYSTEM_MESSAGE_ROLES.includes(msg.role) &&
492493
typeof msg.content === 'string'
493494
) {
494495
systemMessage = msg.content;

src/providers/google/chatComplete.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
Params,
77
ToolCall,
88
ToolChoice,
9+
SYSTEM_MESSAGE_ROLES,
910
} from '../../types/requestBody';
1011
import { buildGoogleSearchRetrievalTool } from '../google-vertex-ai/chatComplete';
1112
import { derefer, getMimeType } from '../google-vertex-ai/utils';
@@ -152,7 +153,7 @@ export const GoogleChatCompleteConfig: ProviderConfig = {
152153
// From gemini-1.5 onwards, systemInstruction is supported
153154
// Skipping system message and sending it in systemInstruction for gemini 1.5 models
154155
if (
155-
message.role === 'system' &&
156+
SYSTEM_MESSAGE_ROLES.includes(message.role) &&
156157
!SYSTEM_INSTRUCTION_DISABLED_MODELS.includes(params.model as string)
157158
)
158159
return;
@@ -261,7 +262,7 @@ export const GoogleChatCompleteConfig: ProviderConfig = {
261262
if (!firstMessage) return;
262263

263264
if (
264-
firstMessage.role === 'system' &&
265+
SYSTEM_MESSAGE_ROLES.includes(firstMessage.role) &&
265266
typeof firstMessage.content === 'string'
266267
) {
267268
return {
@@ -275,7 +276,7 @@ export const GoogleChatCompleteConfig: ProviderConfig = {
275276
}
276277

277278
if (
278-
firstMessage.role === 'system' &&
279+
SYSTEM_MESSAGE_ROLES.includes(firstMessage.role) &&
279280
typeof firstMessage.content === 'object' &&
280281
firstMessage.content?.[0]?.text
281282
) {

src/providers/huggingface/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { HUGGING_FACE } from '../../globals';
2+
import { Params } from '../../types/requestBody';
23
import { OpenAIErrorResponseTransform } from '../openai/utils';
34
import {
45
ChatCompletionResponse,
@@ -18,6 +19,12 @@ export const HuggingfaceChatCompleteConfig: ProviderConfig = {
1819
messages: {
1920
param: 'messages',
2021
default: '',
22+
transform: (params: Params) => {
23+
return params.messages?.map((message) => {
24+
if (message.role === 'developer') return { ...message, role: 'system' };
25+
return message;
26+
});
27+
},
2128
},
2229
functions: {
2330
param: 'functions',

src/providers/lingyi/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { LINGYI } from '../../globals';
2+
import { Params } from '../../types/requestBody';
23
import {
34
ChatCompletionResponse,
45
ErrorResponse,
@@ -18,6 +19,12 @@ export const LingyiChatCompleteConfig: ProviderConfig = {
1819
messages: {
1920
param: 'messages',
2021
default: '',
22+
transform: (params: Params) => {
23+
return params.messages?.map((message) => {
24+
if (message.role === 'developer') return { ...message, role: 'system' };
25+
return message;
26+
});
27+
},
2128
},
2229
max_tokens: {
2330
param: 'max_tokens',

src/providers/mistral-ai/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { MISTRAL_AI } from '../../globals';
2+
import { Params } from '../../types/requestBody';
23
import {
34
ChatCompletionResponse,
45
ErrorResponse,
@@ -18,6 +19,12 @@ export const MistralAIChatCompleteConfig: ProviderConfig = {
1819
messages: {
1920
param: 'messages',
2021
default: [],
22+
transform: (params: Params) => {
23+
return params.messages?.map((message) => {
24+
if (message.role === 'developer') return { ...message, role: 'system' };
25+
return message;
26+
});
27+
},
2128
},
2229
temperature: {
2330
param: 'temperature',

src/providers/monsterapi/chatComplete.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { MONSTERAPI } from '../../globals';
2+
import { Params } from '../../types/requestBody';
23
import {
34
ChatCompletionResponse,
45
ErrorResponse,
@@ -47,6 +48,12 @@ export const MonsterAPIChatCompleteConfig: ProviderConfig = {
4748
param: 'messages',
4849
required: true,
4950
default: [],
51+
transform: (params: Params) => {
52+
return params.messages?.map((message) => {
53+
if (message.role === 'developer') return { ...message, role: 'system' };
54+
return message;
55+
});
56+
},
5057
},
5158
};
5259

0 commit comments

Comments
 (0)