Skip to content

Commit 791c1e3

Browse files
authored
Feat/support image for grok 4 (#4869)
support image for grok 4
1 parent e3eeb5d commit 791c1e3

File tree

2 files changed

+52
-4
lines changed

2 files changed

+52
-4
lines changed

packages/components/nodes/chatmodels/ChatXAI/ChatXAI.ts

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { BaseCache } from '@langchain/core/caches'
2-
import { ChatXAI, ChatXAIInput } from '@langchain/xai'
3-
import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
2+
import { ChatXAIInput } from '@langchain/xai'
3+
import { ICommonObject, IMultiModalOption, INode, INodeData, INodeParams } from '../../../src/Interface'
44
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
5+
import { ChatXAI } from './FlowiseChatXAI'
56

67
class ChatXAI_ChatModels implements INode {
78
label: string
@@ -18,7 +19,7 @@ class ChatXAI_ChatModels implements INode {
1819
constructor() {
1920
this.label = 'ChatXAI'
2021
this.name = 'chatXAI'
21-
this.version = 1.0
22+
this.version = 2.0
2223
this.type = 'ChatXAI'
2324
this.icon = 'xai.png'
2425
this.category = 'Chat Models'
@@ -74,6 +75,15 @@ class ChatXAI_ChatModels implements INode {
7475
step: 1,
7576
optional: true,
7677
additionalParams: true
78+
},
79+
{
80+
label: 'Allow Image Uploads',
81+
name: 'allowImageUploads',
82+
type: 'boolean',
83+
description:
84+
'Allow image input. Refer to the <a href="https://docs.flowiseai.com/using-flowise/uploads#image" target="_blank">docs</a> for more details.',
85+
default: false,
86+
optional: true
7787
}
7888
]
7989
}
@@ -84,6 +94,7 @@ class ChatXAI_ChatModels implements INode {
8494
const modelName = nodeData.inputs?.modelName as string
8595
const maxTokens = nodeData.inputs?.maxTokens as string
8696
const streaming = nodeData.inputs?.streaming as boolean
97+
const allowImageUploads = nodeData.inputs?.allowImageUploads as boolean
8798

8899
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
89100
const xaiApiKey = getCredentialParam('xaiApiKey', credentialData, nodeData)
@@ -97,7 +108,15 @@ class ChatXAI_ChatModels implements INode {
97108
if (cache) obj.cache = cache
98109
if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10)
99110

100-
const model = new ChatXAI(obj)
111+
const multiModalOption: IMultiModalOption = {
112+
image: {
113+
allowImageUploads: allowImageUploads ?? false
114+
}
115+
}
116+
117+
const model = new ChatXAI(nodeData.id, obj)
118+
model.setMultiModalOption(multiModalOption)
119+
101120
return model
102121
}
103122
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { ChatXAI as LCChatXAI, ChatXAIInput } from '@langchain/xai'
2+
import { IMultiModalOption, IVisionChatModal } from '../../../src'
3+
4+
export class ChatXAI extends LCChatXAI implements IVisionChatModal {
5+
configuredModel: string
6+
configuredMaxToken?: number
7+
multiModalOption: IMultiModalOption
8+
id: string
9+
10+
constructor(id: string, fields?: ChatXAIInput) {
11+
super(fields)
12+
this.id = id
13+
this.configuredModel = fields?.model ?? ''
14+
this.configuredMaxToken = fields?.maxTokens
15+
}
16+
17+
revertToOriginalModel(): void {
18+
this.modelName = this.configuredModel
19+
this.maxTokens = this.configuredMaxToken
20+
}
21+
22+
setMultiModalOption(multiModalOption: IMultiModalOption): void {
23+
this.multiModalOption = multiModalOption
24+
}
25+
26+
setVisionModel(): void {
27+
// pass
28+
}
29+
}

0 commit comments

Comments
 (0)