mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 19:00:59 +03:00
Merge pull request #1207 from FlowiseAI/feature/OpenAI-Assistant
Feature/add openai assistant tools and documents fix
This commit is contained in:
@@ -6,7 +6,7 @@ import { MessageContentImageFile, MessageContentText } from 'openai/resources/be
|
|||||||
import * as fsDefault from 'node:fs'
|
import * as fsDefault from 'node:fs'
|
||||||
import * as path from 'node:path'
|
import * as path from 'node:path'
|
||||||
import fetch from 'node-fetch'
|
import fetch from 'node-fetch'
|
||||||
import { flatten } from 'lodash'
|
import { flatten, uniqWith, isEqual } from 'lodash'
|
||||||
import { zodToJsonSchema } from 'zod-to-json-schema'
|
import { zodToJsonSchema } from 'zod-to-json-schema'
|
||||||
|
|
||||||
class OpenAIAssistant_Agents implements INode {
|
class OpenAIAssistant_Agents implements INode {
|
||||||
@@ -142,7 +142,9 @@ class OpenAIAssistant_Agents implements INode {
|
|||||||
const retrievedAssistant = await openai.beta.assistants.retrieve(openAIAssistantId)
|
const retrievedAssistant = await openai.beta.assistants.retrieve(openAIAssistantId)
|
||||||
|
|
||||||
if (formattedTools.length) {
|
if (formattedTools.length) {
|
||||||
await openai.beta.assistants.update(openAIAssistantId, { tools: formattedTools })
|
let filteredTools = uniqWith([...retrievedAssistant.tools, ...formattedTools], isEqual)
|
||||||
|
filteredTools = filteredTools.filter((tool) => !(tool.type === 'function' && !(tool as any).function))
|
||||||
|
await openai.beta.assistants.update(openAIAssistantId, { tools: filteredTools })
|
||||||
}
|
}
|
||||||
|
|
||||||
const chatmessage = await appDataSource.getRepository(databaseEntities['ChatMessage']).findOneBy({
|
const chatmessage = await appDataSource.getRepository(databaseEntities['ChatMessage']).findOneBy({
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ import {
|
|||||||
clearSessionMemoryFromViewMessageDialog,
|
clearSessionMemoryFromViewMessageDialog,
|
||||||
getUserHome
|
getUserHome
|
||||||
} from './utils'
|
} from './utils'
|
||||||
import { cloneDeep, omit } from 'lodash'
|
import { cloneDeep, omit, uniqWith, isEqual } from 'lodash'
|
||||||
import { getDataSource } from './DataSource'
|
import { getDataSource } from './DataSource'
|
||||||
import { NodesPool } from './NodesPool'
|
import { NodesPool } from './NodesPool'
|
||||||
import { ChatFlow } from './database/entities/ChatFlow'
|
import { ChatFlow } from './database/entities/ChatFlow'
|
||||||
@@ -670,14 +670,11 @@ export class App {
|
|||||||
|
|
||||||
const openai = new OpenAI({ apiKey: openAIApiKey })
|
const openai = new OpenAI({ apiKey: openAIApiKey })
|
||||||
const retrievedAssistant = await openai.beta.assistants.retrieve(req.params.id)
|
const retrievedAssistant = await openai.beta.assistants.retrieve(req.params.id)
|
||||||
|
const resp = await openai.files.list()
|
||||||
|
const existingFiles = resp.data ?? []
|
||||||
|
|
||||||
if (retrievedAssistant.file_ids && retrievedAssistant.file_ids.length) {
|
if (retrievedAssistant.file_ids && retrievedAssistant.file_ids.length) {
|
||||||
const files = []
|
;(retrievedAssistant as any).files = existingFiles.filter((file) => retrievedAssistant.file_ids.includes(file.id))
|
||||||
for (const file_id of retrievedAssistant.file_ids) {
|
|
||||||
const file = await openai.files.retrieve(file_id)
|
|
||||||
files.push(file)
|
|
||||||
}
|
|
||||||
;(retrievedAssistant as any).files = files
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.json(retrievedAssistant)
|
return res.json(retrievedAssistant)
|
||||||
@@ -779,13 +776,23 @@ export class App {
|
|||||||
})
|
})
|
||||||
assistantDetails.id = newAssistant.id
|
assistantDetails.id = newAssistant.id
|
||||||
} else {
|
} else {
|
||||||
|
const retrievedAssistant = await openai.beta.assistants.retrieve(assistantDetails.id)
|
||||||
|
let filteredTools = uniqWith([...retrievedAssistant.tools, ...tools], isEqual)
|
||||||
|
filteredTools = filteredTools.filter((tool) => !(tool.type === 'function' && !(tool as any).function))
|
||||||
|
|
||||||
await openai.beta.assistants.update(assistantDetails.id, {
|
await openai.beta.assistants.update(assistantDetails.id, {
|
||||||
name: assistantDetails.name,
|
name: assistantDetails.name,
|
||||||
description: assistantDetails.description,
|
description: assistantDetails.description,
|
||||||
instructions: assistantDetails.instructions,
|
instructions: assistantDetails.instructions,
|
||||||
model: assistantDetails.model,
|
model: assistantDetails.model,
|
||||||
tools,
|
tools: filteredTools,
|
||||||
file_ids: (assistantDetails.files ?? []).map((file: OpenAI.Files.FileObject) => file.id)
|
file_ids: uniqWith(
|
||||||
|
[
|
||||||
|
...retrievedAssistant.file_ids,
|
||||||
|
...(assistantDetails.files ?? []).map((file: OpenAI.Files.FileObject) => file.id)
|
||||||
|
],
|
||||||
|
isEqual
|
||||||
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -881,13 +888,20 @@ export class App {
|
|||||||
assistantDetails.files = [...assistantDetails.files, ...uploadedFiles]
|
assistantDetails.files = [...assistantDetails.files, ...uploadedFiles]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const retrievedAssistant = await openai.beta.assistants.retrieve(openAIAssistantId)
|
||||||
|
let filteredTools = uniqWith([...retrievedAssistant.tools, ...tools], isEqual)
|
||||||
|
filteredTools = filteredTools.filter((tool) => !(tool.type === 'function' && !(tool as any).function))
|
||||||
|
|
||||||
await openai.beta.assistants.update(openAIAssistantId, {
|
await openai.beta.assistants.update(openAIAssistantId, {
|
||||||
name: assistantDetails.name,
|
name: assistantDetails.name,
|
||||||
description: assistantDetails.description,
|
description: assistantDetails.description,
|
||||||
instructions: assistantDetails.instructions,
|
instructions: assistantDetails.instructions,
|
||||||
model: assistantDetails.model,
|
model: assistantDetails.model,
|
||||||
tools,
|
tools: filteredTools,
|
||||||
file_ids: (assistantDetails.files ?? []).map((file: OpenAI.Files.FileObject) => file.id)
|
file_ids: uniqWith(
|
||||||
|
[...retrievedAssistant.file_ids, ...(assistantDetails.files ?? []).map((file: OpenAI.Files.FileObject) => file.id)],
|
||||||
|
isEqual
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
const newAssistantDetails = {
|
const newAssistantDetails = {
|
||||||
|
|||||||
Reference in New Issue
Block a user