feat: add last run store

This commit is contained in:
Joel 2025-04-16 16:04:27 +08:00
parent 379d382914
commit ea40cf5bcc
4 changed files with 110 additions and 8 deletions

View File

@ -102,6 +102,7 @@ import Confirm from '@/app/components/base/confirm'
import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants' import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants'
import { fetchFileUploadConfig } from '@/service/common' import { fetchFileUploadConfig } from '@/service/common'
import DatasetsDetailProvider from './datasets-detail-store/provider' import DatasetsDetailProvider from './datasets-detail-store/provider'
import LastRunProvider from './last-run-store/provider'
import CurrentVarsProvider from './current-vars-store/provider' import CurrentVarsProvider from './current-vars-store/provider'
const nodeTypes = { const nodeTypes = {
@ -454,6 +455,7 @@ const WorkflowWrap = memo(() => {
edges={edgesData} > edges={edgesData} >
<FeaturesProvider features={initialFeatures}> <FeaturesProvider features={initialFeatures}>
<DatasetsDetailProvider nodes={nodesData}> <DatasetsDetailProvider nodes={nodesData}>
<LastRunProvider>
<CurrentVarsProvider> <CurrentVarsProvider>
<Workflow <Workflow
nodes={nodesData} nodes={nodesData}
@ -461,6 +463,7 @@ const WorkflowWrap = memo(() => {
viewport={data?.graph.viewport} viewport={data?.graph.viewport}
/> />
</CurrentVarsProvider> </CurrentVarsProvider>
</LastRunProvider>
</DatasetsDetailProvider> </DatasetsDetailProvider>
</FeaturesProvider> </FeaturesProvider>
</WorkflowHistoryProvider> </WorkflowHistoryProvider>

View File

@ -0,0 +1,30 @@
import type { FC } from 'react'
import { createContext, useRef } from 'react'
import { createLastRunStore } from './store'
type LastRunStoreApi = ReturnType<typeof createLastRunStore>
type LastRunContextType = LastRunStoreApi | undefined
export const LastRunContext = createContext<LastRunContextType>(undefined)
type LastRunProviderProps = {
children: React.ReactNode
}
const LastRunProvider: FC<LastRunProviderProps> = ({
children,
}) => {
const storeRef = useRef<LastRunStoreApi>()
if (!storeRef.current)
storeRef.current = createLastRunStore()
return (
<LastRunContext.Provider value={storeRef.current!}>
{children}
</LastRunContext.Provider>
)
}
export default LastRunProvider

View File

@ -0,0 +1,67 @@
import { useContext } from 'react'
import { createStore, useStore } from 'zustand'
import { LastRunContext } from './provider'
type NodeInfo = {
id: string
name: string
type: string
vars: {
key: string
type: string
value: any
}[]
} & {
input: Record<string, any>
output: Record<string, any>
}
type LastRunState = {
nodes: NodeInfo[]
}
type LastRunActions = {
setInfos: (vars: NodeInfo[]) => void
getInfos: () => NodeInfo[]
getNodeInfo: (nodeId: string) => NodeInfo | undefined
}
type LastRunStore = LastRunState & LastRunActions
export const createLastRunStore = () => {
return createStore<LastRunStore>((set, get) => ({
nodes: [{
id: '',
name: '',
type: '',
vars: [],
input: {},
output: {},
}],
setInfos: (vars) => {
set(() => ({
nodes: vars,
}))
},
getInfos: () => {
return get().nodes
},
clearVars: () => {
set(() => ({
nodes: [],
}))
},
getNodeInfo: (nodeId) => {
const nodes = get().nodes
return nodes.find(node => node.id === nodeId)
},
}))
}
export const useLastRunStore = <T>(selector: (state: LastRunStore) => T): T => {
const store = useContext(LastRunContext)
if (!store)
throw new Error('Missing LastRunContext.Provider in the tree')
return useStore(store, selector)
}

View File

@ -21,6 +21,7 @@ import ResultPanel from '@/app/components/workflow/run/result-panel'
import Tooltip from '@/app/components/base/tooltip' import Tooltip from '@/app/components/base/tooltip'
import Editor from '@/app/components/workflow/nodes/_base/components/prompt/editor' import Editor from '@/app/components/workflow/nodes/_base/components/prompt/editor'
import { useCurrentVarsStore } from '../../current-vars-store/store' import { useCurrentVarsStore } from '../../current-vars-store/store'
import { useLastRunStore } from '../../last-run-store/store'
const i18nPrefix = 'workflow.nodes.llm' const i18nPrefix = 'workflow.nodes.llm'
@ -30,7 +31,8 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
}) => { }) => {
const { t } = useTranslation() const { t } = useTranslation()
const currentVars = useCurrentVarsStore(state => state.getVars()) const currentVars = useCurrentVarsStore(state => state.getVars())
console.log(currentVars) const lastRunInfo = useLastRunStore(state => state.getInfos())
console.log(currentVars, lastRunInfo)
const { const {
readOnly, readOnly,
inputs, inputs,