Files
prowler/ui/lib/lighthouse/utils.ts
2025-08-21 12:40:49 +02:00

68 lines
1.7 KiB
TypeScript

import {
AIMessage,
BaseMessage,
ChatMessage,
HumanMessage,
} from "@langchain/core/messages";
import type { Message } from "ai";
import type { ModelParams } from "@/types/lighthouse";
// https://stackoverflow.com/questions/79081298/how-to-stream-langchain-langgraphs-final-generation
/**
* Converts a Vercel message to a LangChain message.
* @param message - The message to convert.
* @returns The converted LangChain message.
*/
export const convertVercelMessageToLangChainMessage = (
message: Message,
): BaseMessage => {
switch (message.role) {
case "user":
return new HumanMessage({ content: message.content });
case "assistant":
return new AIMessage({ content: message.content });
default:
return new ChatMessage({ content: message.content, role: message.role });
}
};
/**
* Converts a LangChain message to a Vercel message.
* @param message - The message to convert.
* @returns The converted Vercel message.
*/
export const convertLangChainMessageToVercelMessage = (
message: BaseMessage,
) => {
switch (message.getType()) {
case "human":
return { content: message.content, role: "user" };
case "ai":
return {
content: message.content,
role: "assistant",
tool_calls: (message as AIMessage).tool_calls,
};
default:
return { content: message.content, role: message.getType() };
}
};
export const getModelParams = (config: any): ModelParams => {
const modelId = config.model;
const params: ModelParams = {
maxTokens: config.max_tokens,
temperature: config.temperature,
reasoningEffort: undefined,
};
if (modelId.startsWith("gpt-5")) {
params.temperature = undefined;
params.reasoningEffort = "minimal";
}
return params;
};