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
55 changes: 50 additions & 5 deletions packages/components/nodes/chatmodels/ChatLitellm/ChatLitellm.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { OpenAIChatInput, ChatOpenAI } from '@langchain/openai'
import { OpenAIChatInput, ChatOpenAI as LangchainChatOpenAI } from '@langchain/openai'
import { BaseCache } from '@langchain/core/caches'
import { BaseLLMParams } from '@langchain/core/language_models/llms'
import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
import { ICommonObject, IMultiModalOption, INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
import { ChatOpenAI } from '../ChatOpenAI/FlowiseChatOpenAI'

class ChatLitellm_ChatModels implements INode {
label: string
Expand All @@ -19,12 +20,12 @@ class ChatLitellm_ChatModels implements INode {
constructor() {
this.label = 'ChatLitellm'
this.name = 'chatLitellm'
this.version = 1.0
this.version = 2.0
this.type = 'ChatLitellm'
this.icon = 'litellm.jpg'
this.category = 'Chat Models'
this.description = 'Connect to a Litellm server using OpenAI-compatible API'
this.baseClasses = [this.type, 'BaseChatModel', ...getBaseClasses(ChatOpenAI)]
this.baseClasses = [this.type, 'BaseChatModel', ...getBaseClasses(LangchainChatOpenAI)]
this.credential = {
label: 'Connect Credential',
name: 'credential',
Expand Down Expand Up @@ -90,6 +91,40 @@ class ChatLitellm_ChatModels implements INode {
step: 1,
optional: true,
additionalParams: true
},
{
label: 'Allow Image Uploads',
name: 'allowImageUploads',
type: 'boolean',
description:
'Allow image input. Image uploads need a model marked supports_vision=true in LiteLLM. Refer to the <a href="https://docs.flowiseai.com/using-flowise/uploads#image" target="_blank">docs</a> for more details.',
default: false,
optional: true
},
{
label: 'Image Resolution',
description: 'This parameter controls the resolution in which the model views the image.',
name: 'imageResolution',
type: 'options',
options: [
{
label: 'Low',
name: 'low'
},
{
label: 'High',
name: 'high'
},
{
label: 'Auto',
name: 'auto'
}
],
default: 'low',
optional: false,
show: {
allowImageUploads: true
}
}
]
}
Expand All @@ -103,6 +138,8 @@ class ChatLitellm_ChatModels implements INode {
const maxTokens = nodeData.inputs?.maxTokens as string
const topP = nodeData.inputs?.topP as string
const timeout = nodeData.inputs?.timeout as string
const allowImageUploads = nodeData.inputs?.allowImageUploads as boolean
const imageResolution = nodeData.inputs?.imageResolution as string

const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const apiKey = getCredentialParam('litellmApiKey', credentialData, nodeData)
Expand All @@ -129,7 +166,15 @@ class ChatLitellm_ChatModels implements INode {
obj.apiKey = apiKey
}

const model = new ChatOpenAI(obj)
const multiModalOption: IMultiModalOption = {
image: {
allowImageUploads: allowImageUploads ?? false,
imageResolution
}
}

const model = new ChatOpenAI(nodeData.id, obj)
model.setMultiModalOption(multiModalOption)

return model
}
Expand Down