mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-23 23:00:35 +03:00
Chore/upgrade llamaindex version (#2440)
* updates to loader to support file upload * adding a todo * upgrade llamaindex * update groq icon * update azure models * update llamaindex version --------- Co-authored-by: Henry <hzj94@hotmail.com>
This commit is contained in:
@@ -244,21 +244,29 @@
|
||||
"label": "gpt-4",
|
||||
"name": "gpt-4"
|
||||
},
|
||||
{
|
||||
"label": "gpt-4-turbo",
|
||||
"name": "gpt-4-turbo"
|
||||
},
|
||||
{
|
||||
"label": "gpt-4-32k",
|
||||
"name": "gpt-4-32k"
|
||||
},
|
||||
{
|
||||
"label": "gpt-35-turbo",
|
||||
"name": "gpt-35-turbo"
|
||||
"label": "gpt-3.5-turbo",
|
||||
"name": "gpt-3.5-turbo"
|
||||
},
|
||||
{
|
||||
"label": "gpt-35-turbo-16k",
|
||||
"name": "gpt-35-turbo-16k"
|
||||
"label": "gpt-3.5-turbo-16k",
|
||||
"name": "gpt-3.5-turbo-16k"
|
||||
},
|
||||
{
|
||||
"label": "gpt-4-vision-preview",
|
||||
"name": "gpt-4-vision-preview"
|
||||
},
|
||||
{
|
||||
"label": "gpt-4-1106-preview",
|
||||
"name": "gpt-4-1106-preview"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -504,6 +512,10 @@
|
||||
{
|
||||
"name": "chatOpenAI_LlamaIndex",
|
||||
"models": [
|
||||
{
|
||||
"label": "gpt-4o",
|
||||
"name": "gpt-4o"
|
||||
},
|
||||
{
|
||||
"label": "gpt-4",
|
||||
"name": "gpt-4"
|
||||
@@ -622,6 +634,23 @@
|
||||
"name": "mistral-large-2402"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "chatMistral_LlamaIndex",
|
||||
"models": [
|
||||
{
|
||||
"label": "mistral-tiny",
|
||||
"name": "mistral-tiny"
|
||||
},
|
||||
{
|
||||
"label": "mistral-small",
|
||||
"name": "mistral-small"
|
||||
},
|
||||
{
|
||||
"label": "mistral-medium",
|
||||
"name": "mistral-medium"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"llm": [
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="16" cy="16" r="14" fill="#CC9B7A"/><path d="m10 21 4.5-10L19 21m-7.2-2.857h5.4M18.5 11 23 21" stroke="#1F1F1E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
|
After Width: | Height: | Size: 269 B |
+24
-23
@@ -1,9 +1,9 @@
|
||||
import { flatten } from 'lodash'
|
||||
import { ChatMessage, OpenAI, OpenAIAgent } from 'llamaindex'
|
||||
import { getBaseClasses } from '../../../src/utils'
|
||||
import { FlowiseMemory, ICommonObject, IMessage, INode, INodeData, INodeParams, IUsedTool } from '../../../src/Interface'
|
||||
import { MessageContentTextDetail, ChatMessage, AnthropicAgent, Anthropic } from 'llamaindex'
|
||||
import { getBaseClasses } from '../../../../src/utils'
|
||||
import { FlowiseMemory, ICommonObject, IMessage, INode, INodeData, INodeParams, IUsedTool } from '../../../../src/Interface'
|
||||
|
||||
class OpenAIFunctionAgent_LlamaIndex_Agents implements INode {
|
||||
class AnthropicAgent_LlamaIndex_Agents implements INode {
|
||||
label: string
|
||||
name: string
|
||||
version: number
|
||||
@@ -18,16 +18,15 @@ class OpenAIFunctionAgent_LlamaIndex_Agents implements INode {
|
||||
badge?: string
|
||||
|
||||
constructor(fields?: { sessionId?: string }) {
|
||||
this.label = 'OpenAI Tool Agent'
|
||||
this.name = 'openAIToolAgentLlamaIndex'
|
||||
this.label = 'Anthropic Agent'
|
||||
this.name = 'anthropicAgentLlamaIndex'
|
||||
this.version = 1.0
|
||||
this.type = 'OpenAIToolAgent'
|
||||
this.type = 'AnthropicAgent'
|
||||
this.category = 'Agents'
|
||||
this.icon = 'function.svg'
|
||||
this.description = `Agent that uses OpenAI Function Calling to pick the tools and args to call using LlamaIndex`
|
||||
this.baseClasses = [this.type, ...getBaseClasses(OpenAIAgent)]
|
||||
this.icon = 'Anthropic.svg'
|
||||
this.description = `Agent that uses Anthropic Claude Function Calling to pick the tools and args to call using LlamaIndex`
|
||||
this.baseClasses = [this.type, ...getBaseClasses(AnthropicAgent)]
|
||||
this.tags = ['LlamaIndex']
|
||||
this.badge = 'NEW'
|
||||
this.inputs = [
|
||||
{
|
||||
label: 'Tools',
|
||||
@@ -41,7 +40,7 @@ class OpenAIFunctionAgent_LlamaIndex_Agents implements INode {
|
||||
type: 'BaseChatMemory'
|
||||
},
|
||||
{
|
||||
label: 'OpenAI/Azure Chat Model',
|
||||
label: 'Anthropic Claude Model',
|
||||
name: 'model',
|
||||
type: 'BaseChatModel_LlamaIndex'
|
||||
},
|
||||
@@ -63,7 +62,7 @@ class OpenAIFunctionAgent_LlamaIndex_Agents implements INode {
|
||||
|
||||
async run(nodeData: INodeData, input: string, options: ICommonObject): Promise<string | ICommonObject> {
|
||||
const memory = nodeData.inputs?.memory as FlowiseMemory
|
||||
const model = nodeData.inputs?.model as OpenAI
|
||||
const model = nodeData.inputs?.model as Anthropic
|
||||
const systemMessage = nodeData.inputs?.systemMessage as string
|
||||
const prependMessages = options?.prependMessages
|
||||
|
||||
@@ -94,31 +93,33 @@ class OpenAIFunctionAgent_LlamaIndex_Agents implements INode {
|
||||
}
|
||||
}
|
||||
|
||||
const agent = new OpenAIAgent({
|
||||
const agent = new AnthropicAgent({
|
||||
tools,
|
||||
llm: model,
|
||||
prefixMessages: chatHistory,
|
||||
chatHistory: chatHistory,
|
||||
verbose: process.env.DEBUG === 'true' ? true : false
|
||||
})
|
||||
|
||||
let text = ''
|
||||
const usedTools: IUsedTool[] = []
|
||||
|
||||
const response = await agent.chat({
|
||||
message: input
|
||||
})
|
||||
const response = await agent.chat({ message: input, chatHistory, verbose: process.env.DEBUG === 'true' ? true : false })
|
||||
|
||||
if (response.sources.length) {
|
||||
for (const sourceTool of response.sources) {
|
||||
usedTools.push({
|
||||
tool: sourceTool.toolName,
|
||||
toolInput: sourceTool.rawInput,
|
||||
toolOutput: sourceTool.rawOutput
|
||||
tool: sourceTool.tool?.metadata.name ?? '',
|
||||
toolInput: sourceTool.input,
|
||||
toolOutput: sourceTool.output as any
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
text = String(response)
|
||||
if (Array.isArray(response.response.message.content) && response.response.message.content.length > 0) {
|
||||
text = (response.response.message.content[0] as MessageContentTextDetail).text
|
||||
} else {
|
||||
text = response.response.message.content as string
|
||||
}
|
||||
|
||||
await memory.addChatMessages(
|
||||
[
|
||||
@@ -138,4 +139,4 @@ class OpenAIFunctionAgent_LlamaIndex_Agents implements INode {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nodeClass: OpenAIFunctionAgent_LlamaIndex_Agents }
|
||||
module.exports = { nodeClass: AnthropicAgent_LlamaIndex_Agents }
|
||||
+167
@@ -0,0 +1,167 @@
|
||||
import { flatten } from 'lodash'
|
||||
import { ChatMessage, OpenAI, OpenAIAgent } from 'llamaindex'
|
||||
import { getBaseClasses } from '../../../../src/utils'
|
||||
import { FlowiseMemory, ICommonObject, IMessage, INode, INodeData, INodeParams, IUsedTool } from '../../../../src/Interface'
|
||||
|
||||
class OpenAIFunctionAgent_LlamaIndex_Agents implements INode {
|
||||
label: string
|
||||
name: string
|
||||
version: number
|
||||
description: string
|
||||
type: string
|
||||
icon: string
|
||||
category: string
|
||||
baseClasses: string[]
|
||||
tags: string[]
|
||||
inputs: INodeParams[]
|
||||
sessionId?: string
|
||||
badge?: string
|
||||
|
||||
constructor(fields?: { sessionId?: string }) {
|
||||
this.label = 'OpenAI Tool Agent'
|
||||
this.name = 'openAIToolAgentLlamaIndex'
|
||||
this.version = 2.0
|
||||
this.type = 'OpenAIToolAgent'
|
||||
this.category = 'Agents'
|
||||
this.icon = 'function.svg'
|
||||
this.description = `Agent that uses OpenAI Function Calling to pick the tools and args to call using LlamaIndex`
|
||||
this.baseClasses = [this.type, ...getBaseClasses(OpenAIAgent)]
|
||||
this.tags = ['LlamaIndex']
|
||||
this.inputs = [
|
||||
{
|
||||
label: 'Tools',
|
||||
name: 'tools',
|
||||
type: 'Tool_LlamaIndex',
|
||||
list: true
|
||||
},
|
||||
{
|
||||
label: 'Memory',
|
||||
name: 'memory',
|
||||
type: 'BaseChatMemory'
|
||||
},
|
||||
{
|
||||
label: 'OpenAI/Azure Chat Model',
|
||||
name: 'model',
|
||||
type: 'BaseChatModel_LlamaIndex'
|
||||
},
|
||||
{
|
||||
label: 'System Message',
|
||||
name: 'systemMessage',
|
||||
type: 'string',
|
||||
rows: 4,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
}
|
||||
]
|
||||
this.sessionId = fields?.sessionId
|
||||
}
|
||||
|
||||
async init(): Promise<any> {
|
||||
return null
|
||||
}
|
||||
|
||||
async run(nodeData: INodeData, input: string, options: ICommonObject): Promise<string | ICommonObject> {
|
||||
const memory = nodeData.inputs?.memory as FlowiseMemory
|
||||
const model = nodeData.inputs?.model as OpenAI
|
||||
const systemMessage = nodeData.inputs?.systemMessage as string
|
||||
let tools = nodeData.inputs?.tools
|
||||
tools = flatten(tools)
|
||||
|
||||
const isStreamingEnabled = options.socketIO && options.socketIOClientId
|
||||
|
||||
const chatHistory = [] as ChatMessage[]
|
||||
|
||||
if (systemMessage) {
|
||||
chatHistory.push({
|
||||
content: systemMessage,
|
||||
role: 'system'
|
||||
})
|
||||
}
|
||||
|
||||
const msgs = (await memory.getChatMessages(this.sessionId, false)) as IMessage[]
|
||||
for (const message of msgs) {
|
||||
if (message.type === 'apiMessage') {
|
||||
chatHistory.push({
|
||||
content: message.message,
|
||||
role: 'assistant'
|
||||
})
|
||||
} else if (message.type === 'userMessage') {
|
||||
chatHistory.push({
|
||||
content: message.message,
|
||||
role: 'user'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const agent = new OpenAIAgent({
|
||||
tools,
|
||||
llm: model,
|
||||
chatHistory: chatHistory,
|
||||
verbose: process.env.DEBUG === 'true' ? true : false
|
||||
})
|
||||
|
||||
let text = ''
|
||||
let isStreamingStarted = false
|
||||
const usedTools: IUsedTool[] = []
|
||||
|
||||
if (isStreamingEnabled) {
|
||||
const stream = await agent.chat({
|
||||
message: input,
|
||||
chatHistory,
|
||||
stream: true,
|
||||
verbose: process.env.DEBUG === 'true' ? true : false
|
||||
})
|
||||
for await (const chunk of stream) {
|
||||
//console.log('chunk', chunk)
|
||||
text += chunk.response.delta
|
||||
if (!isStreamingStarted) {
|
||||
isStreamingStarted = true
|
||||
options.socketIO.to(options.socketIOClientId).emit('start', chunk.response.delta)
|
||||
if (chunk.sources.length) {
|
||||
for (const sourceTool of chunk.sources) {
|
||||
usedTools.push({
|
||||
tool: sourceTool.tool?.metadata.name ?? '',
|
||||
toolInput: sourceTool.input,
|
||||
toolOutput: sourceTool.output as any
|
||||
})
|
||||
}
|
||||
options.socketIO.to(options.socketIOClientId).emit('usedTools', usedTools)
|
||||
}
|
||||
}
|
||||
|
||||
options.socketIO.to(options.socketIOClientId).emit('token', chunk.response.delta)
|
||||
}
|
||||
} else {
|
||||
const response = await agent.chat({ message: input, chatHistory, verbose: process.env.DEBUG === 'true' ? true : false })
|
||||
if (response.sources.length) {
|
||||
for (const sourceTool of response.sources) {
|
||||
usedTools.push({
|
||||
tool: sourceTool.tool?.metadata.name ?? '',
|
||||
toolInput: sourceTool.input,
|
||||
toolOutput: sourceTool.output as any
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
text = response.response.message.content as string
|
||||
}
|
||||
|
||||
await memory.addChatMessages(
|
||||
[
|
||||
{
|
||||
text: input,
|
||||
type: 'userMessage'
|
||||
},
|
||||
{
|
||||
text: text,
|
||||
type: 'apiMessage'
|
||||
}
|
||||
],
|
||||
this.sessionId
|
||||
)
|
||||
|
||||
return usedTools.length ? { text: text, usedTools } : text
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nodeClass: OpenAIFunctionAgent_LlamaIndex_Agents }
|
||||
@@ -0,0 +1,9 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16 12.6108L22 15.9608" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7.17701 19.5848C6.49568 20.4069 6.12505 21.4424 6.12993 22.5101C6.13481 23.5779 6.51489 24.6099 7.2037 25.4258C7.89252 26.2416 8.84622 26.7893 9.89802 26.9732C10.9498 27.157 12.0328 26.9653 12.9575 26.4314L15.4787 24.9657M18.6002 14.106V19.5848" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M8.19877 9.98459C6.39026 9.67775 4.57524 10.4982 3.60403 12.1806C3.00524 13.2178 2.84295 14.4504 3.15284 15.6073C3.46273 16.7642 4.21943 17.7507 5.25652 18.3498L10.3049 21.3269C10.6109 21.5074 10.9898 21.5119 11.3001 21.3388L18.6 17.2655" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M17.0172 6.06585C16.6456 5.06522 15.9342 4.227 15.0072 3.6977C14.0803 3.1684 12.9969 2.98168 11.9462 3.17018C10.8956 3.35869 9.94464 3.91042 9.25954 4.72895C8.57444 5.54747 8.19879 6.58074 8.19824 7.64814V13.6575C8.19824 14.0154 8.38951 14.346 8.69977 14.5244L15.9992 18.7215" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M24.8216 11.7476C25.5029 10.9255 25.8735 9.89004 25.8687 8.8223C25.8638 7.75457 25.4837 6.72253 24.7949 5.90667C24.1061 5.09082 23.1524 4.54308 22.1006 4.35924C21.0488 4.17541 19.9658 4.36718 19.0411 4.90101L13.8942 7.90613C13.5872 8.08539 13.3984 8.41418 13.3984 8.76971V17.2265" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M28.3944 19.0635C28.9932 18.0263 29.1555 16.7937 28.8456 15.6368C28.5357 14.4799 27.779 13.4934 26.7419 12.8943L21.6409 9.91752C21.3316 9.73703 20.9494 9.7357 20.6388 9.91405L13.3984 14.0723" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M18 28.9997H18.8071C19.6909 28.9997 20.4526 28.3921 20.6297 27.546L21.991 21.4537C22.1681 20.6076 22.9299 20 23.8136 20H24.6207M20.0929 22.7023H23.8136M24 25.0214H24.5014C24.8438 25.0214 25.1586 25.2052 25.3207 25.5L27.3429 28.5213C27.5051 28.8161 27.8198 29 28.1622 29H28.6997M24.049 29C24.6261 29 25.1609 28.7041 25.4578 28.2205L27.2424 25.8009C27.5393 25.3173 28.0741 25.0214 28.6512 25.0214" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
@@ -1,6 +1,6 @@
|
||||
import { ICommonObject, INode, INodeData, INodeOptionsValue, INodeParams } from '../../../src/Interface'
|
||||
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
|
||||
import { OpenAI, ALL_AVAILABLE_OPENAI_MODELS } from 'llamaindex'
|
||||
import { OpenAI } from 'llamaindex'
|
||||
import { getModels, MODEL_TYPE } from '../../../src/modelLoader'
|
||||
|
||||
interface AzureOpenAIConfig {
|
||||
@@ -10,6 +10,28 @@ interface AzureOpenAIConfig {
|
||||
deploymentName?: string
|
||||
}
|
||||
|
||||
const ALL_AZURE_OPENAI_CHAT_MODELS = {
|
||||
'gpt-35-turbo': { contextWindow: 4096, openAIModel: 'gpt-3.5-turbo' },
|
||||
'gpt-35-turbo-16k': {
|
||||
contextWindow: 16384,
|
||||
openAIModel: 'gpt-3.5-turbo-16k'
|
||||
},
|
||||
'gpt-4': { contextWindow: 8192, openAIModel: 'gpt-4' },
|
||||
'gpt-4-32k': { contextWindow: 32768, openAIModel: 'gpt-4-32k' },
|
||||
'gpt-4-turbo': {
|
||||
contextWindow: 128000,
|
||||
openAIModel: 'gpt-4-turbo'
|
||||
},
|
||||
'gpt-4-vision-preview': {
|
||||
contextWindow: 128000,
|
||||
openAIModel: 'gpt-4-vision-preview'
|
||||
},
|
||||
'gpt-4-1106-preview': {
|
||||
contextWindow: 128000,
|
||||
openAIModel: 'gpt-4-1106-preview'
|
||||
}
|
||||
}
|
||||
|
||||
class AzureChatOpenAI_LlamaIndex_ChatModels implements INode {
|
||||
label: string
|
||||
name: string
|
||||
@@ -90,7 +112,7 @@ class AzureChatOpenAI_LlamaIndex_ChatModels implements INode {
|
||||
}
|
||||
|
||||
async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
|
||||
const modelName = nodeData.inputs?.modelName as keyof typeof ALL_AVAILABLE_OPENAI_MODELS
|
||||
const modelName = nodeData.inputs?.modelName as keyof typeof ALL_AZURE_OPENAI_CHAT_MODELS
|
||||
const temperature = nodeData.inputs?.temperature as string
|
||||
const maxTokens = nodeData.inputs?.maxTokens as string
|
||||
const topP = nodeData.inputs?.topP as string
|
||||
|
||||
@@ -36,7 +36,7 @@ class ChatAnthropic_LlamaIndex_ChatModels implements INode {
|
||||
{
|
||||
label: 'Model Name',
|
||||
name: 'modelName',
|
||||
type: 'options',
|
||||
type: 'asyncOptions',
|
||||
loadMethod: 'listModels',
|
||||
default: 'claude-3-haiku'
|
||||
},
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
import { ICommonObject, INode, INodeData, INodeOptionsValue, INodeParams } from '../../../src/Interface'
|
||||
import { MODEL_TYPE, getModels } from '../../../src/modelLoader'
|
||||
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
|
||||
import { ALL_AVAILABLE_MISTRAL_MODELS, MistralAI } from 'llamaindex'
|
||||
|
||||
class ChatMistral_LlamaIndex_ChatModels implements INode {
|
||||
label: string
|
||||
name: string
|
||||
version: number
|
||||
type: string
|
||||
icon: string
|
||||
category: string
|
||||
description: string
|
||||
tags: string[]
|
||||
baseClasses: string[]
|
||||
credential: INodeParams
|
||||
inputs: INodeParams[]
|
||||
|
||||
constructor() {
|
||||
this.label = 'ChatMistral'
|
||||
this.name = 'chatMistral_LlamaIndex'
|
||||
this.version = 1.0
|
||||
this.type = 'ChatMistral'
|
||||
this.icon = 'MistralAI.svg'
|
||||
this.category = 'Chat Models'
|
||||
this.description = 'Wrapper around ChatMistral LLM specific for LlamaIndex'
|
||||
this.baseClasses = [this.type, 'BaseChatModel_LlamaIndex', ...getBaseClasses(MistralAI)]
|
||||
this.tags = ['LlamaIndex']
|
||||
this.credential = {
|
||||
label: 'Connect Credential',
|
||||
name: 'credential',
|
||||
type: 'credential',
|
||||
credentialNames: ['mistralAIApi']
|
||||
}
|
||||
this.inputs = [
|
||||
{
|
||||
label: 'Model Name',
|
||||
name: 'modelName',
|
||||
type: 'asyncOptions',
|
||||
loadMethod: 'listModels',
|
||||
default: 'mistral-tiny'
|
||||
},
|
||||
{
|
||||
label: 'Temperature',
|
||||
name: 'temperature',
|
||||
type: 'number',
|
||||
step: 0.1,
|
||||
default: 0.9,
|
||||
optional: true
|
||||
},
|
||||
{
|
||||
label: 'Max Tokens',
|
||||
name: 'maxTokensToSample',
|
||||
type: 'number',
|
||||
step: 1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Top P',
|
||||
name: 'topP',
|
||||
type: 'number',
|
||||
step: 0.1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
//@ts-ignore
|
||||
loadMethods = {
|
||||
async listModels(): Promise<INodeOptionsValue[]> {
|
||||
return await getModels(MODEL_TYPE.CHAT, 'chatMistral_LlamaIndex')
|
||||
}
|
||||
}
|
||||
|
||||
async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
|
||||
const temperature = nodeData.inputs?.temperature as string
|
||||
const modelName = nodeData.inputs?.modelName as keyof typeof ALL_AVAILABLE_MISTRAL_MODELS
|
||||
const maxTokensToSample = nodeData.inputs?.maxTokensToSample as string
|
||||
const topP = nodeData.inputs?.topP as string
|
||||
|
||||
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
|
||||
const apiKey = getCredentialParam('mistralAIAPIKey', credentialData, nodeData)
|
||||
|
||||
const obj: Partial<MistralAI> = {
|
||||
temperature: parseFloat(temperature),
|
||||
model: modelName,
|
||||
apiKey: apiKey
|
||||
}
|
||||
|
||||
if (maxTokensToSample) obj.maxTokens = parseInt(maxTokensToSample, 10)
|
||||
if (topP) obj.topP = parseFloat(topP)
|
||||
|
||||
const model = new MistralAI(obj)
|
||||
return model
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nodeClass: ChatMistral_LlamaIndex_ChatModels }
|
||||
@@ -0,0 +1,221 @@
|
||||
import { INode, INodeData, INodeParams } from '../../../src/Interface'
|
||||
import { getBaseClasses } from '../../../src/utils'
|
||||
import { OllamaParams, Ollama } from 'llamaindex'
|
||||
|
||||
class ChatOllama_LlamaIndex_ChatModels implements INode {
|
||||
label: string
|
||||
name: string
|
||||
version: number
|
||||
type: string
|
||||
icon: string
|
||||
category: string
|
||||
description: string
|
||||
tags: string[]
|
||||
baseClasses: string[]
|
||||
inputs: INodeParams[]
|
||||
|
||||
constructor() {
|
||||
this.label = 'ChatOllama'
|
||||
this.name = 'chatOllama_LlamaIndex'
|
||||
this.version = 1.0
|
||||
this.type = 'ChatOllama'
|
||||
this.icon = 'Ollama.svg'
|
||||
this.category = 'Chat Models'
|
||||
this.description = 'Wrapper around ChatOllama LLM specific for LlamaIndex'
|
||||
this.baseClasses = [this.type, 'BaseChatModel_LlamaIndex', ...getBaseClasses(Ollama)]
|
||||
this.tags = ['LlamaIndex']
|
||||
this.inputs = [
|
||||
{
|
||||
label: 'Base URL',
|
||||
name: 'baseUrl',
|
||||
type: 'string',
|
||||
default: 'http://localhost:11434'
|
||||
},
|
||||
{
|
||||
label: 'Model Name',
|
||||
name: 'modelName',
|
||||
type: 'string',
|
||||
placeholder: 'llama3'
|
||||
},
|
||||
{
|
||||
label: 'Temperature',
|
||||
name: 'temperature',
|
||||
type: 'number',
|
||||
description:
|
||||
'The temperature of the model. Increasing the temperature will make the model answer more creatively. (Default: 0.8). Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 0.1,
|
||||
default: 0.9,
|
||||
optional: true
|
||||
},
|
||||
{
|
||||
label: 'Top P',
|
||||
name: 'topP',
|
||||
type: 'number',
|
||||
description:
|
||||
'Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9). Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 0.1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Top K',
|
||||
name: 'topK',
|
||||
type: 'number',
|
||||
description:
|
||||
'Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative. (Default: 40). Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Mirostat',
|
||||
name: 'mirostat',
|
||||
type: 'number',
|
||||
description:
|
||||
'Enable Mirostat sampling for controlling perplexity. (default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0). Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Mirostat ETA',
|
||||
name: 'mirostatEta',
|
||||
type: 'number',
|
||||
description:
|
||||
'Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive. (Default: 0.1) Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 0.1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Mirostat TAU',
|
||||
name: 'mirostatTau',
|
||||
type: 'number',
|
||||
description:
|
||||
'Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text. (Default: 5.0) Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 0.1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Context Window Size',
|
||||
name: 'numCtx',
|
||||
type: 'number',
|
||||
description:
|
||||
'Sets the size of the context window used to generate the next token. (Default: 2048) Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Number of GPU',
|
||||
name: 'numGpu',
|
||||
type: 'number',
|
||||
description:
|
||||
'The number of layers to send to the GPU(s). On macOS it defaults to 1 to enable metal support, 0 to disable. Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Number of Thread',
|
||||
name: 'numThread',
|
||||
type: 'number',
|
||||
description:
|
||||
'Sets the number of threads to use during computation. By default, Ollama will detect this for optimal performance. It is recommended to set this value to the number of physical CPU cores your system has (as opposed to the logical number of cores). Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Repeat Last N',
|
||||
name: 'repeatLastN',
|
||||
type: 'number',
|
||||
description:
|
||||
'Sets how far back for the model to look back to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx). Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Repeat Penalty',
|
||||
name: 'repeatPenalty',
|
||||
type: 'number',
|
||||
description:
|
||||
'Sets how strongly to penalize repetitions. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. (Default: 1.1). Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 0.1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Stop Sequence',
|
||||
name: 'stop',
|
||||
type: 'string',
|
||||
rows: 4,
|
||||
placeholder: 'AI assistant:',
|
||||
description:
|
||||
'Sets the stop sequences to use. Use comma to seperate different sequences. Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Tail Free Sampling',
|
||||
name: 'tfsZ',
|
||||
type: 'number',
|
||||
description:
|
||||
'Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (Default: 1). Refer to <a target="_blank" href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md#valid-parameters-and-values">docs</a> for more details',
|
||||
step: 0.1,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
async init(nodeData: INodeData): Promise<any> {
|
||||
const temperature = nodeData.inputs?.temperature as string
|
||||
const baseUrl = nodeData.inputs?.baseUrl as string
|
||||
const modelName = nodeData.inputs?.modelName as string
|
||||
const topP = nodeData.inputs?.topP as string
|
||||
const topK = nodeData.inputs?.topK as string
|
||||
const mirostat = nodeData.inputs?.mirostat as string
|
||||
const mirostatEta = nodeData.inputs?.mirostatEta as string
|
||||
const mirostatTau = nodeData.inputs?.mirostatTau as string
|
||||
const numCtx = nodeData.inputs?.numCtx as string
|
||||
const numGpu = nodeData.inputs?.numGpu as string
|
||||
const numThread = nodeData.inputs?.numThread as string
|
||||
const repeatLastN = nodeData.inputs?.repeatLastN as string
|
||||
const repeatPenalty = nodeData.inputs?.repeatPenalty as string
|
||||
const stop = nodeData.inputs?.stop as string
|
||||
const tfsZ = nodeData.inputs?.tfsZ as string
|
||||
|
||||
const obj: OllamaParams = {
|
||||
model: modelName,
|
||||
options: {},
|
||||
config: {
|
||||
host: baseUrl
|
||||
}
|
||||
}
|
||||
|
||||
if (temperature) obj.options.temperature = parseFloat(temperature)
|
||||
if (topP) obj.options.top_p = parseFloat(topP)
|
||||
if (topK) obj.options.top_k = parseFloat(topK)
|
||||
if (mirostat) obj.options.mirostat = parseFloat(mirostat)
|
||||
if (mirostatEta) obj.options.mirostat_eta = parseFloat(mirostatEta)
|
||||
if (mirostatTau) obj.options.mirostat_tau = parseFloat(mirostatTau)
|
||||
if (numCtx) obj.options.num_ctx = parseFloat(numCtx)
|
||||
if (numGpu) obj.options.main_gpu = parseFloat(numGpu)
|
||||
if (numThread) obj.options.num_thread = parseFloat(numThread)
|
||||
if (repeatLastN) obj.options.repeat_last_n = parseFloat(repeatLastN)
|
||||
if (repeatPenalty) obj.options.repeat_penalty = parseFloat(repeatPenalty)
|
||||
if (tfsZ) obj.options.tfs_z = parseFloat(tfsZ)
|
||||
if (stop) {
|
||||
const stopSequences = stop.split(',')
|
||||
obj.options.stop = stopSequences
|
||||
}
|
||||
|
||||
const model = new Ollama(obj)
|
||||
return model
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nodeClass: ChatOllama_LlamaIndex_ChatModels }
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ICommonObject, INode, INodeData, INodeOptionsValue, INodeParams } from '../../../src/Interface'
|
||||
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
|
||||
import { OpenAI, ALL_AVAILABLE_OPENAI_MODELS } from 'llamaindex'
|
||||
import { OpenAI, OpenAISession, ALL_AVAILABLE_OPENAI_MODELS } from 'llamaindex'
|
||||
import { getModels, MODEL_TYPE } from '../../../src/modelLoader'
|
||||
|
||||
class ChatOpenAI_LlamaIndex_LLMs implements INode {
|
||||
@@ -115,8 +115,9 @@ class ChatOpenAI_LlamaIndex_LLMs implements INode {
|
||||
if (maxTokens) obj.maxTokens = parseInt(maxTokens, 10)
|
||||
if (topP) obj.topP = parseFloat(topP)
|
||||
if (timeout) obj.timeout = parseInt(timeout, 10)
|
||||
const openai = new OpenAISession(obj)
|
||||
|
||||
const model = new OpenAI(obj)
|
||||
const model = new OpenAI({ ...obj, session: openai })
|
||||
return model
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
|
||||
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
|
||||
import { TogetherLLM, OpenAI } from 'llamaindex'
|
||||
|
||||
class ChatTogetherAI_LlamaIndex_ChatModels implements INode {
|
||||
label: string
|
||||
name: string
|
||||
version: number
|
||||
type: string
|
||||
icon: string
|
||||
category: string
|
||||
description: string
|
||||
tags: string[]
|
||||
baseClasses: string[]
|
||||
credential: INodeParams
|
||||
inputs: INodeParams[]
|
||||
|
||||
constructor() {
|
||||
this.label = 'ChatTogetherAI'
|
||||
this.name = 'chatTogetherAI_LlamaIndex'
|
||||
this.version = 1.0
|
||||
this.type = 'ChatTogetherAI'
|
||||
this.icon = 'togetherai.png'
|
||||
this.category = 'Chat Models'
|
||||
this.description = 'Wrapper around ChatTogetherAI LLM specific for LlamaIndex'
|
||||
this.baseClasses = [this.type, 'BaseChatModel_LlamaIndex', ...getBaseClasses(TogetherLLM)]
|
||||
this.tags = ['LlamaIndex']
|
||||
this.credential = {
|
||||
label: 'Connect Credential',
|
||||
name: 'credential',
|
||||
type: 'credential',
|
||||
credentialNames: ['togetherAIApi']
|
||||
}
|
||||
this.inputs = [
|
||||
{
|
||||
label: 'Model Name',
|
||||
name: 'modelName',
|
||||
type: 'string',
|
||||
placeholder: 'mixtral-8x7b-32768',
|
||||
description: 'Refer to <a target="_blank" href="https://docs.together.ai/docs/inference-models">models</a> page'
|
||||
},
|
||||
{
|
||||
label: 'Temperature',
|
||||
name: 'temperature',
|
||||
type: 'number',
|
||||
step: 0.1,
|
||||
default: 0.9,
|
||||
optional: true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
|
||||
const temperature = nodeData.inputs?.temperature as string
|
||||
const modelName = nodeData.inputs?.modelName as string
|
||||
|
||||
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
|
||||
const togetherAIApiKey = getCredentialParam('togetherAIApiKey', credentialData, nodeData)
|
||||
|
||||
const obj: Partial<OpenAI> = {
|
||||
temperature: parseFloat(temperature),
|
||||
model: modelName,
|
||||
apiKey: togetherAIApiKey
|
||||
}
|
||||
|
||||
const model = new TogetherLLM(obj)
|
||||
return model
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nodeClass: ChatTogetherAI_LlamaIndex_ChatModels }
|
||||
@@ -0,0 +1,80 @@
|
||||
import { ICommonObject, INode, INodeData, INodeOptionsValue, INodeParams } from '../../../src/Interface'
|
||||
import { MODEL_TYPE, getModels } from '../../../src/modelLoader'
|
||||
import { getBaseClasses, getCredentialData, getCredentialParam } from '../../../src/utils'
|
||||
import { Groq, OpenAI } from 'llamaindex'
|
||||
|
||||
class ChatGroq_LlamaIndex_ChatModels implements INode {
|
||||
label: string
|
||||
name: string
|
||||
version: number
|
||||
type: string
|
||||
icon: string
|
||||
category: string
|
||||
description: string
|
||||
tags: string[]
|
||||
baseClasses: string[]
|
||||
credential: INodeParams
|
||||
inputs: INodeParams[]
|
||||
|
||||
constructor() {
|
||||
this.label = 'ChatGroq'
|
||||
this.name = 'chatGroq_LlamaIndex'
|
||||
this.version = 1.0
|
||||
this.type = 'ChatGroq'
|
||||
this.icon = 'groq.png'
|
||||
this.category = 'Chat Models'
|
||||
this.description = 'Wrapper around Groq LLM specific for LlamaIndex'
|
||||
this.baseClasses = [this.type, 'BaseChatModel_LlamaIndex', ...getBaseClasses(Groq)]
|
||||
this.tags = ['LlamaIndex']
|
||||
this.credential = {
|
||||
label: 'Connect Credential',
|
||||
name: 'credential',
|
||||
type: 'credential',
|
||||
credentialNames: ['groqApi'],
|
||||
optional: true
|
||||
}
|
||||
this.inputs = [
|
||||
{
|
||||
label: 'Model Name',
|
||||
name: 'modelName',
|
||||
type: 'asyncOptions',
|
||||
loadMethod: 'listModels',
|
||||
placeholder: 'llama3-70b-8192'
|
||||
},
|
||||
{
|
||||
label: 'Temperature',
|
||||
name: 'temperature',
|
||||
type: 'number',
|
||||
step: 0.1,
|
||||
default: 0.9,
|
||||
optional: true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
//@ts-ignore
|
||||
loadMethods = {
|
||||
async listModels(): Promise<INodeOptionsValue[]> {
|
||||
return await getModels(MODEL_TYPE.CHAT, 'groqChat')
|
||||
}
|
||||
}
|
||||
|
||||
async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
|
||||
const temperature = nodeData.inputs?.temperature as string
|
||||
const modelName = nodeData.inputs?.modelName as string
|
||||
|
||||
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
|
||||
const groqApiKey = getCredentialParam('groqApiKey', credentialData, nodeData)
|
||||
|
||||
const obj: Partial<OpenAI> = {
|
||||
temperature: parseFloat(temperature),
|
||||
model: modelName,
|
||||
apiKey: groqApiKey
|
||||
}
|
||||
|
||||
const model = new Groq(obj)
|
||||
return model
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nodeClass: ChatGroq_LlamaIndex_ChatModels }
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -1,5 +1,5 @@
|
||||
import { FlowiseMemory, ICommonObject, IMessage, INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface'
|
||||
import { BaseNode, Metadata, BaseRetriever, LLM, ContextChatEngine, ChatMessage } from 'llamaindex'
|
||||
import { Metadata, BaseRetriever, LLM, ContextChatEngine, ChatMessage, NodeWithScore } from 'llamaindex'
|
||||
import { reformatSourceDocuments } from '../EngineUtils'
|
||||
|
||||
class ContextChatEngine_LlamaIndex implements INode {
|
||||
@@ -102,7 +102,7 @@ class ContextChatEngine_LlamaIndex implements INode {
|
||||
let text = ''
|
||||
let isStreamingStarted = false
|
||||
let sourceDocuments: ICommonObject[] = []
|
||||
let sourceNodes: BaseNode<Metadata>[] = []
|
||||
let sourceNodes: NodeWithScore<Metadata>[] = []
|
||||
const isStreamingEnabled = options.socketIO && options.socketIOClientId
|
||||
|
||||
if (isStreamingEnabled) {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { BaseNode, Metadata } from 'llamaindex'
|
||||
import { Metadata, NodeWithScore } from 'llamaindex'
|
||||
|
||||
export const reformatSourceDocuments = (sourceNodes: BaseNode<Metadata>[]) => {
|
||||
export const reformatSourceDocuments = (sourceNodes: NodeWithScore<Metadata>[]) => {
|
||||
const sourceDocuments = []
|
||||
for (const node of sourceNodes) {
|
||||
sourceDocuments.push({
|
||||
pageContent: (node as any).text,
|
||||
metadata: node.metadata
|
||||
pageContent: (node.node as any).text,
|
||||
metadata: node.node.metadata
|
||||
})
|
||||
}
|
||||
return sourceDocuments
|
||||
|
||||
@@ -6,8 +6,8 @@ import {
|
||||
TreeSummarize,
|
||||
Refine,
|
||||
SimpleResponseBuilder,
|
||||
BaseNode,
|
||||
Metadata
|
||||
Metadata,
|
||||
NodeWithScore
|
||||
} from 'llamaindex'
|
||||
import { reformatSourceDocuments } from '../EngineUtils'
|
||||
|
||||
@@ -69,7 +69,7 @@ class QueryEngine_LlamaIndex implements INode {
|
||||
|
||||
let text = ''
|
||||
let sourceDocuments: ICommonObject[] = []
|
||||
let sourceNodes: BaseNode<Metadata>[] = []
|
||||
let sourceNodes: NodeWithScore<Metadata>[] = []
|
||||
let isStreamingStarted = false
|
||||
const isStreamingEnabled = options.socketIO && options.socketIOClientId
|
||||
|
||||
|
||||
@@ -10,9 +10,9 @@ import {
|
||||
QueryEngineTool,
|
||||
LLMQuestionGenerator,
|
||||
SubQuestionQueryEngine,
|
||||
BaseNode,
|
||||
Metadata,
|
||||
serviceContextFromDefaults
|
||||
serviceContextFromDefaults,
|
||||
NodeWithScore
|
||||
} from 'llamaindex'
|
||||
import { reformatSourceDocuments } from '../EngineUtils'
|
||||
|
||||
@@ -86,7 +86,7 @@ class SubQuestionQueryEngine_LlamaIndex implements INode {
|
||||
|
||||
let text = ''
|
||||
let sourceDocuments: ICommonObject[] = []
|
||||
let sourceNodes: BaseNode<Metadata>[] = []
|
||||
let sourceNodes: NodeWithScore<Metadata>[] = []
|
||||
let isStreamingStarted = false
|
||||
const isStreamingEnabled = options.socketIO && options.socketIOClientId
|
||||
|
||||
|
||||
@@ -2,7 +2,9 @@ import {
|
||||
BaseNode,
|
||||
Document,
|
||||
Metadata,
|
||||
VectorStore,
|
||||
IEmbedModel,
|
||||
VectorStoreBase,
|
||||
VectorStoreNoEmbedModel,
|
||||
VectorStoreQuery,
|
||||
VectorStoreQueryResult,
|
||||
serviceContextFromDefaults,
|
||||
@@ -123,7 +125,8 @@ class PineconeLlamaIndex_VectorStores implements INode {
|
||||
const pcvs = new PineconeVectorStore({
|
||||
indexName,
|
||||
apiKey: pineconeApiKey,
|
||||
namespace: pineconeNamespace
|
||||
namespace: pineconeNamespace,
|
||||
embedModel: embeddings
|
||||
})
|
||||
|
||||
const flattenDocs = docs && docs.length ? flatten(docs) : []
|
||||
@@ -165,7 +168,8 @@ class PineconeLlamaIndex_VectorStores implements INode {
|
||||
|
||||
const obj: PineconeParams = {
|
||||
indexName,
|
||||
apiKey: pineconeApiKey
|
||||
apiKey: pineconeApiKey,
|
||||
embedModel: embeddings
|
||||
}
|
||||
|
||||
if (pineconeNamespace) obj.namespace = pineconeNamespace
|
||||
@@ -211,9 +215,9 @@ type PineconeParams = {
|
||||
namespace?: string
|
||||
chunkSize?: number
|
||||
queryFilter?: object
|
||||
}
|
||||
} & IEmbedModel
|
||||
|
||||
class PineconeVectorStore implements VectorStore {
|
||||
class PineconeVectorStore extends VectorStoreBase implements VectorStoreNoEmbedModel {
|
||||
storesText: boolean = true
|
||||
db?: Pinecone
|
||||
indexName: string
|
||||
@@ -223,6 +227,7 @@ class PineconeVectorStore implements VectorStore {
|
||||
queryFilter?: object
|
||||
|
||||
constructor(params: PineconeParams) {
|
||||
super(params?.embedModel)
|
||||
this.indexName = params?.indexName
|
||||
this.apiKey = params?.apiKey
|
||||
this.namespace = params?.namespace ?? ''
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"langfuse-langchain": "^3.3.4",
|
||||
"langsmith": "0.1.6",
|
||||
"linkifyjs": "^4.1.1",
|
||||
"llamaindex": "^0.2.1",
|
||||
"llamaindex": "^0.3.13",
|
||||
"lodash": "^4.17.21",
|
||||
"lunary": "^0.6.16",
|
||||
"mammoth": "^1.5.1",
|
||||
|
||||
@@ -660,6 +660,8 @@ export const convertSchemaToZod = (schema: string | object): ICommonObject => {
|
||||
export const flattenObject = (obj: ICommonObject, parentKey?: string) => {
|
||||
let result: any = {}
|
||||
|
||||
if (!obj) return result
|
||||
|
||||
Object.keys(obj).forEach((key) => {
|
||||
const value = obj[key]
|
||||
const _key = parentKey ? parentKey + '.' + key : key
|
||||
|
||||
@@ -1078,12 +1078,16 @@ export const isFlowValidForStream = (reactFlowNodes: IReactFlowNode[], endingNod
|
||||
'chatAnthropic',
|
||||
'chatAnthropic_LlamaIndex',
|
||||
'chatOllama',
|
||||
'chatOllama_LlamaIndex',
|
||||
'awsChatBedrock',
|
||||
'chatMistralAI',
|
||||
'chatMistral_LlamaIndex',
|
||||
'groqChat',
|
||||
'chatGroq_LlamaIndex',
|
||||
'chatCohere',
|
||||
'chatGoogleGenerativeAI',
|
||||
'chatTogetherAI'
|
||||
'chatTogetherAI',
|
||||
'chatTogetherAI_LlamaIndex'
|
||||
],
|
||||
LLMs: ['azureOpenAI', 'openAI', 'ollama']
|
||||
}
|
||||
@@ -1112,7 +1116,8 @@ export const isFlowValidForStream = (reactFlowNodes: IReactFlowNode[], endingNod
|
||||
'airtableAgent',
|
||||
'conversationalRetrievalAgent',
|
||||
'openAIToolAgent',
|
||||
'toolAgent'
|
||||
'toolAgent',
|
||||
'openAIToolAgentLlamaIndex'
|
||||
]
|
||||
isValidChainOrAgent = whitelistAgents.includes(endingNodeData.name)
|
||||
|
||||
|
||||
Generated
+574
-245
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user