Skip to content

Commit bb5e8b6

Browse files
feat: fix type error + formatting
1 parent 4e5461b commit bb5e8b6

File tree

1 file changed

+75
-61
lines changed

1 file changed

+75
-61
lines changed

core/llm/llms/Gemini.ts

+75-61
Original file line numberDiff line numberDiff line change
@@ -70,71 +70,85 @@ class Gemini extends BaseLLM {
7070
}
7171
}
7272

73-
/**
74-
* Removes the system message and merges it with the next user message if present.
75-
* @param messages Array of chat messages
76-
* @returns Modified array with system message merged into user message if applicable
77-
*/
78-
public removeSystemMessage(messages: ChatMessage[]): ChatMessage[] {
79-
// If no messages or first message isn't system, return copy of original messages
80-
if (messages.length === 0 || messages[0]?.role !== "system") {
81-
return [...messages];
82-
}
73+
/**
74+
* Removes the system message and merges it with the next user message if present.
75+
* @param messages Array of chat messages
76+
* @returns Modified array with system message merged into user message if applicable
77+
*/
78+
public removeSystemMessage(messages: ChatMessage[]): ChatMessage[] {
79+
// If no messages or first message isn't system, return copy of original messages
80+
if (messages.length === 0 || messages[0]?.role !== "system") {
81+
return [...messages];
82+
}
8383

84-
// Extract system message
85-
const systemMessage : ChatMessage = messages[0];
86-
87-
// Extract system content based on its type
88-
let systemContent = "";
89-
if (typeof systemMessage.content === "string") {
90-
systemContent = systemMessage.content;
91-
} else if (Array.isArray(systemMessage.content)) {
92-
const contentArray : Array<MessagePart> = systemMessage.content as Array<MessagePart>;
93-
const concatenatedText = contentArray
94-
.filter(part => part.type === "text")
95-
.map(part => part.text)
96-
.join(" ");
97-
systemContent = concatenatedText ? concatenatedText : "";
98-
} else if (systemMessage.content && typeof systemMessage.content === "object") {
99-
const typedContent = systemMessage.content as TextMessagePart;
100-
systemContent = typedContent?.text || "";
101-
}
102-
103-
// Create new array without the system message
104-
const remainingMessages : ChatMessage[] = messages.slice(1);
105-
106-
// Check if there's a user message to merge with
107-
if (remainingMessages.length > 0 && remainingMessages[0].role === "user") {
108-
const userMessage : ChatMessage = remainingMessages[0];
109-
const prefix = `System message - follow these instructions in every response: ${systemContent}\n\n---\n\n`;
110-
111-
// Merge based on user content type
112-
if (typeof userMessage.content === "string") {
113-
userMessage.content = prefix + userMessage.content;
114-
} else if (Array.isArray(userMessage.content)) {
115-
const contentArray : Array<MessagePart> = userMessage.content as Array<MessagePart>;
116-
const textPart = contentArray.find(part => part.type === "text") as TextMessagePart | undefined;
117-
118-
if (textPart) {
119-
textPart.text = prefix + textPart.text;
120-
} else {
121-
userMessage.content.push({
122-
type: "text",
123-
text: prefix
124-
} as TextMessagePart);
84+
// Extract system message
85+
const systemMessage: ChatMessage = messages[0];
86+
87+
// Extract system content based on its type
88+
let systemContent = "";
89+
90+
if (typeof systemMessage.content === "string") {
91+
systemContent = systemMessage.content;
92+
} else if (Array.isArray(systemMessage.content)) {
93+
const contentArray: Array<MessagePart> =
94+
systemMessage.content as Array<MessagePart>;
95+
96+
const concatenatedText = contentArray
97+
.filter((part): part is TextMessagePart => part.type === "text")
98+
.map((part) => part.text)
99+
.join(" ");
100+
101+
systemContent = concatenatedText ? concatenatedText : "";
102+
} else if (
103+
systemMessage.content &&
104+
typeof systemMessage.content === "object"
105+
) {
106+
const typedContent = systemMessage.content as TextMessagePart;
107+
systemContent = typedContent?.text || "";
108+
}
109+
110+
// Create new array without the system message
111+
const remainingMessages: ChatMessage[] = messages.slice(1);
112+
113+
// Check if there's a user message to merge with
114+
if (remainingMessages.length > 0 && remainingMessages[0].role === "user") {
115+
const userMessage: ChatMessage = remainingMessages[0];
116+
const prefix = `System message - follow these instructions in every response: ${systemContent}\n\n---\n\n`;
117+
118+
// Merge based on user content type
119+
if (typeof userMessage.content === "string") {
120+
userMessage.content = prefix + userMessage.content;
121+
} else if (Array.isArray(userMessage.content)) {
122+
const contentArray: Array<MessagePart> =
123+
userMessage.content as Array<MessagePart>;
124+
const textPart = contentArray.find((part) => part.type === "text") as
125+
| TextMessagePart
126+
| undefined;
127+
128+
if (textPart) {
129+
textPart.text = prefix + textPart.text;
130+
} else {
131+
userMessage.content.push({
132+
type: "text",
133+
text: prefix,
134+
} as TextMessagePart);
135+
}
136+
} else if (
137+
userMessage.content &&
138+
typeof userMessage.content === "object"
139+
) {
140+
const typedContent = userMessage.content as TextMessagePart;
141+
userMessage.content = [
142+
{
143+
type: "text",
144+
text: prefix + (typedContent.text || ""),
145+
} as TextMessagePart,
146+
];
125147
}
126-
} else if (userMessage.content && typeof userMessage.content === "object") {
127-
const typedContent = userMessage.content as TextMessagePart;
128-
userMessage.content = [{
129-
type: "text",
130-
text: prefix + (typedContent.text || "")
131-
} as TextMessagePart];
132148
}
133-
}
134-
135-
return remainingMessages;
136-
}
137149

150+
return remainingMessages;
151+
}
138152

139153
protected async *_streamChat(
140154
messages: ChatMessage[],

0 commit comments

Comments
 (0)