|
|
@ -18,6 +18,7 @@ import { runWithFallback } from "./runWithFallback"; |
|
|
import type { NodeExecutionContext } from "./types"; |
|
|
import type { NodeExecutionContext } from "./types"; |
|
|
import { mergeConfiguredParameters } from "./generationParameters"; |
|
|
import { mergeConfiguredParameters } from "./generationParameters"; |
|
|
import { uploadPopiserverMediaForGeneration } from "@/utils/temporaryImageUpload"; |
|
|
import { uploadPopiserverMediaForGeneration } from "@/utils/temporaryImageUpload"; |
|
|
|
|
|
import { DEFAULT_POPISERVER_LLM_MODEL_ID } from "@/lib/llmModels"; |
|
|
|
|
|
|
|
|
export interface LlmGenerateOptions { |
|
|
export interface LlmGenerateOptions { |
|
|
/** When true, falls back to stored inputImages/inputPrompt if no connections provide them. */ |
|
|
/** When true, falls back to stored inputImages/inputPrompt if no connections provide them. */ |
|
|
@ -53,6 +54,10 @@ function asNumber(value: unknown): number | undefined { |
|
|
return undefined; |
|
|
return undefined; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function isKimiModel(modelId: string): boolean { |
|
|
|
|
|
return modelId === "kimi-k2.6" || modelId === "31"; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
export async function executeLlmGenerate( |
|
|
export async function executeLlmGenerate( |
|
|
ctx: NodeExecutionContext, |
|
|
ctx: NodeExecutionContext, |
|
|
options: LlmGenerateOptions = {} |
|
|
options: LlmGenerateOptions = {} |
|
|
@ -104,14 +109,19 @@ export async function executeLlmGenerate( |
|
|
const llmModel = modelToUse.modelId as LLMModelType; |
|
|
const llmModel = modelToUse.modelId as LLMModelType; |
|
|
const aiModelId = asNumber(modelToUse.metadata?.aiModelId); |
|
|
const aiModelId = asNumber(modelToUse.metadata?.aiModelId); |
|
|
const headers = buildLlmHeaders(llmProvider, providerSettings); |
|
|
const headers = buildLlmHeaders(llmProvider, providerSettings); |
|
|
|
|
|
const omitTemperature = llmProvider === "popiserver" && isKimiModel(llmModel); |
|
|
|
|
|
|
|
|
const temperature = (parametersOverride?.temperature as number | undefined) ?? nodeData.temperature; |
|
|
const temperature = (parametersOverride?.temperature as number | undefined) ?? nodeData.temperature; |
|
|
const maxTokens = (parametersOverride?.maxTokens as number | undefined) ?? nodeData.maxTokens; |
|
|
const maxTokens = (parametersOverride?.maxTokens as number | undefined) ?? nodeData.maxTokens; |
|
|
const effectiveParameters = mergeConfiguredParameters(parametersOverride, { |
|
|
const effectiveParameters = mergeConfiguredParameters( |
|
|
temperature, |
|
|
parametersOverride, |
|
|
maxTokens, |
|
|
omitTemperature |
|
|
max_tokens: maxTokens, |
|
|
? { maxTokens, max_tokens: maxTokens } |
|
|
}); |
|
|
: { temperature, maxTokens, max_tokens: maxTokens } |
|
|
|
|
|
); |
|
|
|
|
|
if (omitTemperature) { |
|
|
|
|
|
delete effectiveParameters.temperature; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
const preparedMedia = llmProvider === "popiserver" |
|
|
const preparedMedia = llmProvider === "popiserver" |
|
|
@ -133,7 +143,7 @@ export async function executeLlmGenerate( |
|
|
provider: llmProvider, |
|
|
provider: llmProvider, |
|
|
model: llmModel, |
|
|
model: llmModel, |
|
|
...(aiModelId !== undefined && { aiModelId }), |
|
|
...(aiModelId !== undefined && { aiModelId }), |
|
|
temperature, |
|
|
...(!omitTemperature && { temperature }), |
|
|
maxTokens, |
|
|
maxTokens, |
|
|
parameters: effectiveParameters, |
|
|
parameters: effectiveParameters, |
|
|
}), |
|
|
}), |
|
|
@ -211,10 +221,10 @@ export async function executeLlmGenerate( |
|
|
const primaryModel: SelectedModel = { |
|
|
const primaryModel: SelectedModel = { |
|
|
provider: primaryProviderType, |
|
|
provider: primaryProviderType, |
|
|
modelId: usePopiserverLlm |
|
|
modelId: usePopiserverLlm |
|
|
? nodeData.selectedModel?.modelId || "kimi-k2.6" |
|
|
? nodeData.selectedModel?.modelId || DEFAULT_POPISERVER_LLM_MODEL_ID |
|
|
: nodeData.model, |
|
|
: nodeData.model, |
|
|
displayName: usePopiserverLlm |
|
|
displayName: usePopiserverLlm |
|
|
? nodeData.selectedModel?.displayName || "Kimi K2.6" |
|
|
? nodeData.selectedModel?.displayName || "Doubao Seed 2.0 Lite" |
|
|
: nodeData.model, |
|
|
: nodeData.model, |
|
|
metadata: usePopiserverLlm ? nodeData.selectedModel?.metadata : undefined, |
|
|
metadata: usePopiserverLlm ? nodeData.selectedModel?.metadata : undefined, |
|
|
}; |
|
|
}; |
|
|
|