4.8.10 test (#2601)

* perf: workflow children run params

* feat: workflow userId

* fix: ui size

* perf: Markdown whitespace and ai images split

* fix: openai sdk ts
This commit is contained in:
Archer
2024-09-03 13:43:56 +08:00
committed by GitHub
parent 761e35c226
commit 9a57e94b79
43 changed files with 318 additions and 288 deletions

View File

@@ -31,7 +31,7 @@ type Response = DispatchNodeResultType<{
export const dispatchAppRequest = async (props: Props): Promise<Response> => {
const {
app: workflowApp,
runningAppInfo,
workflowStreamResponse,
histories,
query,
@@ -45,7 +45,7 @@ export const dispatchAppRequest = async (props: Props): Promise<Response> => {
// 检查该工作流的tmb是否有调用该app的权限不是校验对话的人是否有权限
const { app: appData } = await authAppByTmbId({
appId: app.id,
tmbId: workflowApp.tmbId,
tmbId: runningAppInfo.tmbId,
per: ReadPermissionVal
});
@@ -61,7 +61,11 @@ export const dispatchAppRequest = async (props: Props): Promise<Response> => {
const { flowResponses, flowUsages, assistantResponses } = await dispatchWorkFlow({
...props,
app: appData,
runningAppInfo: {
id: String(appData._id),
teamId: String(appData.teamId),
tmbId: String(appData.tmbId)
},
runtimeNodes: storeNodes2RuntimeNodes(
appData.modules,
getWorkflowEntryNodeIds(appData.modules)

View File

@@ -37,7 +37,7 @@ export async function dispatchDatasetSearch(
props: DatasetSearchProps
): Promise<DatasetSearchResponse> {
const {
teamId,
runningAppInfo: { teamId },
histories,
node,
params: {

View File

@@ -6,7 +6,8 @@ import {
import { NodeOutputKeyEnum } from '@fastgpt/global/core/workflow/constants';
import type {
ChatDispatchProps,
ModuleDispatchProps
ModuleDispatchProps,
SystemVariablesType
} from '@fastgpt/global/core/workflow/runtime/type';
import type { RuntimeNodeItemType } from '@fastgpt/global/core/workflow/runtime/type.d';
import type {
@@ -554,13 +555,15 @@ export async function dispatchWorkFlow(data: Props): Promise<DispatchFlowRespons
/* get system variable */
export function getSystemVariable({
user,
app,
runningAppInfo,
chatId,
responseChatItemId,
histories = []
}: Props) {
histories = [],
uid
}: Props): SystemVariablesType {
return {
appId: String(app._id),
userId: uid,
appId: String(runningAppInfo.id),
chatId,
responseChatItemId,
histories,

View File

@@ -29,7 +29,7 @@ type UserSelectResponse = DispatchNodeResultType<{
export const dispatchUserSelect = async (props: Props): Promise<UserSelectResponse> => {
const {
workflowStreamResponse,
app: { _id: appId },
runningAppInfo: { id: appId },
chatId,
node: { nodeId, isEntry },
params: { description, userSelectOptions },

View File

@@ -13,6 +13,7 @@ import { authPluginByTmbId } from '../../../../support/permission/app/auth';
import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant';
import { computedPluginUsage } from '../../../app/plugin/utils';
import { filterSystemVariables } from '../utils';
import { getPluginRunUserQuery } from '../../utils';
type RunPluginProps = ModuleDispatchProps<{
[key: string]: any;
@@ -22,9 +23,8 @@ type RunPluginResponse = DispatchNodeResultType<{}>;
export const dispatchRunPlugin = async (props: RunPluginProps): Promise<RunPluginResponse> => {
const {
node: { pluginId },
app: workflowApp,
runningAppInfo,
mode,
teamId,
params: data // Plugin input
} = props;
@@ -33,9 +33,9 @@ export const dispatchRunPlugin = async (props: RunPluginProps): Promise<RunPlugi
}
// auth plugin
await authPluginByTmbId({
const pluginData = await authPluginByTmbId({
appId: pluginId,
tmbId: workflowApp.tmbId,
tmbId: runningAppInfo.tmbId,
per: ReadPermissionVal
});
@@ -61,14 +61,21 @@ export const dispatchRunPlugin = async (props: RunPluginProps): Promise<RunPlugi
showStatus: false
};
});
const runtimeVariables = {
...filterSystemVariables(props.variables),
appId: String(plugin.id)
};
const { flowResponses, flowUsages, assistantResponses } = await dispatchWorkFlow({
...props,
variables: {
...filterSystemVariables(props.variables),
appId: String(plugin.id)
runningAppInfo: {
id: String(plugin.id),
teamId: plugin.teamId || '',
tmbId: pluginData?.tmbId || ''
},
variables: runtimeVariables,
query: getPluginRunUserQuery(plugin.nodes, runtimeVariables).value,
chatConfig: {},
runtimeNodes,
runtimeEdges: initWorkflowEdgeStatus(plugin.edges)
});
@@ -90,7 +97,7 @@ export const dispatchRunPlugin = async (props: RunPluginProps): Promise<RunPlugi
totalPoints: usagePoints,
pluginOutput: output?.pluginOutput,
pluginDetail:
mode === 'test' && plugin.teamId === teamId
mode === 'test' && plugin.teamId === runningAppInfo.teamId
? flowResponses.filter((item) => {
const filterArr = [FlowNodeTypeEnum.pluginOutput];
return !filterArr.includes(item.moduleType as any);

View File

@@ -16,6 +16,7 @@ import { chatValue2RuntimePrompt, runtimePrompt2ChatsValue } from '@fastgpt/glob
import { DispatchNodeResultType } from '@fastgpt/global/core/workflow/runtime/type';
import { authAppByTmbId } from '../../../../support/permission/app/auth';
import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant';
import { getAppLatestVersion } from '../../../app/controller';
type Props = ModuleDispatchProps<{
[NodeInputKeyEnum.userChatInput]: string;
@@ -29,7 +30,7 @@ type Response = DispatchNodeResultType<{
export const dispatchRunAppNode = async (props: Props): Promise<Response> => {
const {
app: workflowApp,
runningAppInfo,
histories,
query,
node: { pluginId },
@@ -49,9 +50,10 @@ export const dispatchRunAppNode = async (props: Props): Promise<Response> => {
// Auth the app by tmbId(Not the user, but the workflow user)
const { app: appData } = await authAppByTmbId({
appId: pluginId,
tmbId: workflowApp.tmbId,
tmbId: runningAppInfo.tmbId,
per: ReadPermissionVal
});
const { nodes, edges, chatConfig } = await getAppLatestVersion(pluginId);
// Auto line
workflowStreamResponse?.({
@@ -64,27 +66,31 @@ export const dispatchRunAppNode = async (props: Props): Promise<Response> => {
const chatHistories = getHistories(history, histories);
const { files } = chatValue2RuntimePrompt(query);
// Concat variables
// Rewrite children app variables
const systemVariables = filterSystemVariables(variables);
const childrenRunVariables = {
...systemVariables,
...childrenAppVariables
...childrenAppVariables,
histories: chatHistories,
appId: String(appData._id)
};
const { flowResponses, flowUsages, assistantResponses } = await dispatchWorkFlow({
...props,
app: appData,
runtimeNodes: storeNodes2RuntimeNodes(
appData.modules,
getWorkflowEntryNodeIds(appData.modules)
),
runtimeEdges: initWorkflowEdgeStatus(appData.edges),
runningAppInfo: {
id: String(appData._id),
teamId: String(appData.teamId),
tmbId: String(appData.tmbId)
},
runtimeNodes: storeNodes2RuntimeNodes(nodes, getWorkflowEntryNodeIds(nodes)),
runtimeEdges: initWorkflowEdgeStatus(edges),
histories: chatHistories,
variables: childrenRunVariables,
query: runtimePrompt2ChatsValue({
files,
text: userChatInput
}),
variables: childrenRunVariables
chatConfig
});
const completeMessages = chatHistories.concat([

View File

@@ -15,7 +15,7 @@ type Response = DispatchNodeResultType<{}>;
export const dispatchCustomFeedback = (props: Record<string, any>): Response => {
const {
app: { _id: appId },
runningAppInfo: { id: appId },
chatId,
responseChatItemId: chatItemId,
stream,

View File

@@ -42,7 +42,7 @@ const UNDEFINED_SIGN = 'UNDEFINED_SIGN';
export const dispatchHttp468Request = async (props: HttpRequestProps): Promise<HttpResponse> => {
let {
app: { _id: appId },
runningAppInfo: { id: appId },
chatId,
responseChatItemId,
variables,

View File

@@ -44,7 +44,7 @@ ${content.slice(0, 100)}${content.length > 100 ? '......' : ''}
export const dispatchReadFiles = async (props: Props): Promise<Response> => {
const {
requestOrigin,
teamId,
runningAppInfo: { teamId },
histories,
chatConfig,
params: { fileUrlList = [] }

View File

@@ -21,7 +21,7 @@ const UNDEFINED_SIGN = 'UNDEFINED_SIGN';
export const dispatchLafRequest = async (props: LafRequestProps): Promise<LafResponse> => {
let {
app: { _id: appId },
runningAppInfo: { id: appId },
chatId,
responseChatItemId,
variables,

View File

@@ -5,7 +5,10 @@ import {
WorkflowIOValueTypeEnum,
NodeOutputKeyEnum
} from '@fastgpt/global/core/workflow/constants';
import { RuntimeEdgeItemType } from '@fastgpt/global/core/workflow/runtime/type';
import {
RuntimeEdgeItemType,
SystemVariablesType
} from '@fastgpt/global/core/workflow/runtime/type';
import { responseWrite } from '../../../common/response';
import { NextApiResponse } from 'next';
import { SseResponseEventEnum } from '@fastgpt/global/core/workflow/runtime/constants';
@@ -144,8 +147,9 @@ export const removeSystemVariable = (variables: Record<string, any>) => {
return copyVariables;
};
export const filterSystemVariables = (variables: Record<string, any>) => {
export const filterSystemVariables = (variables: Record<string, any>): SystemVariablesType => {
return {
userId: variables.userId,
appId: variables.appId,
chatId: variables.chatId,
responseChatItemId: variables.responseChatItemId,