Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 22 additions & 7 deletions packages/shared/src/server/llm/fetchLLMCompletion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,21 @@ import { HttpsProxyAgent } from "https-proxy-agent";

const isLangfuseCloud = Boolean(env.NEXT_PUBLIC_LANGFUSE_CLOUD_REGION);

const PROVIDERS_WITH_REQUIRED_USER_MESSAGE = [
LLMAdapter.VertexAI,
LLMAdapter.Anthropic,
];

const transformSystemMessageToUserMessage = (
messages: ChatMessage[],
): BaseMessage[] => {
const safeContent =
typeof messages[0].content === "string"
? messages[0].content
: JSON.stringify(messages[0].content);
return [new HumanMessage(safeContent)];
};

type ProcessTracedEvents = () => Promise<void>;

type LLMCompletionParams = {
Expand Down Expand Up @@ -174,13 +189,13 @@ export async function fetchLLMCompletion(
};

let finalMessages: BaseMessage[];
// VertexAI requires at least 1 user message
if (modelParams.adapter === LLMAdapter.VertexAI && messages.length === 1) {
const safeContent =
typeof messages[0].content === "string"
? messages[0].content
: JSON.stringify(messages[0].content);
finalMessages = [new HumanMessage(safeContent)];
// Some providers require at least 1 user message
if (
messages.length === 1 &&
PROVIDERS_WITH_REQUIRED_USER_MESSAGE.includes(modelParams.adapter)
) {
// Ensure provider schema compliance
finalMessages = transformSystemMessageToUserMessage(messages);
} else {
finalMessages = messages.map((message) => {
// For arbitrary content types, convert to string safely
Expand Down