(engine) Improve engine overall robustness

This commit is contained in:
Baptiste Arnaud
2023-01-25 11:27:47 +01:00
parent ff62b922a0
commit 30baa611e5
210 changed files with 1820 additions and 1919 deletions

View File

@@ -40,8 +40,15 @@ export const sendMessageProcedure = publicProcedure
const session = sessionId ? await getSession(sessionId) : null
if (!session) {
const { sessionId, typebot, messages, input, resultId, dynamicTheme } =
await startSession(startParams)
const {
sessionId,
typebot,
messages,
input,
resultId,
dynamicTheme,
logs,
} = await startSession(startParams)
return {
sessionId,
typebot: typebot
@@ -55,9 +62,10 @@ export const sendMessageProcedure = publicProcedure
input,
resultId,
dynamicTheme,
logs,
}
} else {
const { messages, input, logic, newSessionState, integrations } =
const { messages, input, logic, newSessionState, integrations, logs } =
await continueBotFlow(session.state)(message)
await prisma.chatSession.updateMany({
@@ -73,6 +81,7 @@ export const sendMessageProcedure = publicProcedure
logic,
integrations,
dynamicTheme: parseDynamicThemeReply(newSessionState),
logs,
}
}
})
@@ -84,6 +93,9 @@ const startSession = async (startParams?: StartParams) => {
message: 'No typebot provided in startParams',
})
const isPreview =
startParams?.isPreview || typeof startParams?.typebot !== 'string'
const typebot = await getTypebot(startParams)
const startVariables = startParams.prefilledVariables
@@ -92,6 +104,7 @@ const startSession = async (startParams?: StartParams) => {
const result = await getResult({
...startParams,
isPreview,
typebot: typebot.id,
startVariables,
isNewResultOnRefreshEnabled:
@@ -112,7 +125,7 @@ const startSession = async (startParams?: StartParams) => {
result: result
? { id: result.id, variables: result.variables, hasStarted: false }
: undefined,
isPreview: startParams.isPreview || typeof startParams.typebot !== 'string',
isPreview,
currentTypebotId: typebot.id,
dynamicTheme: parseDynamicThemeInState(typebot.theme),
}
@@ -122,6 +135,7 @@ const startSession = async (startParams?: StartParams) => {
input,
logic,
newSessionState: newInitialState,
logs,
} = await startBotFlow(initialState, startParams.startGroupId)
if (!input)
@@ -138,6 +152,7 @@ const startSession = async (startParams?: StartParams) => {
),
},
dynamicTheme: parseDynamicThemeReply(newInitialState),
logs,
}
const sessionState: ChatSession['state'] = {
@@ -170,6 +185,7 @@ const startSession = async (startParams?: StartParams) => {
input,
logic,
dynamicTheme: parseDynamicThemeReply(newInitialState),
logs,
} satisfies ChatReply
}

View File

@@ -27,6 +27,7 @@ export const executeGroup =
const messages: ChatReply['messages'] = currentReply?.messages ?? []
let logic: ChatReply['logic'] = currentReply?.logic
let integrations: ChatReply['integrations'] = currentReply?.integrations
let logs: ChatReply['logs'] = currentReply?.logs
let nextEdgeId = null
let newSessionState = state
@@ -58,6 +59,9 @@ export const executeGroup =
blockId: block.id,
},
},
logic,
integrations,
logs,
}
const executionResponse = isLogicBlock(block)
? await executeLogic(newSessionState)(block)
@@ -67,9 +71,11 @@ export const executeGroup =
if (!executionResponse) continue
if ('logic' in executionResponse && executionResponse.logic)
logic = executionResponse.logic
logic = { ...logic, ...executionResponse.logic }
if ('integrations' in executionResponse && executionResponse.integrations)
integrations = executionResponse.integrations
integrations = { ...integrations, ...executionResponse.integrations }
if (executionResponse.logs)
logs = [...(logs ?? []), ...executionResponse.logs]
if (executionResponse.newSessionState)
newSessionState = executionResponse.newSessionState
if (executionResponse.outgoingEdgeId) {
@@ -78,19 +84,23 @@ export const executeGroup =
}
}
if (!nextEdgeId) return { messages, newSessionState, logic, integrations }
if (!nextEdgeId)
return { messages, newSessionState, logic, integrations, logs }
const nextGroup = getNextGroup(newSessionState)(nextEdgeId)
if (nextGroup?.updatedContext) newSessionState = nextGroup.updatedContext
if (!nextGroup) {
return { messages, newSessionState, logic, integrations }
return { messages, newSessionState, logic, integrations, logs }
}
return executeGroup(newSessionState, { messages, logic, integrations })(
nextGroup.group
)
return executeGroup(newSessionState, {
messages,
logic,
integrations,
logs,
})(nextGroup.group)
}
const computeRuntimeOptions =