123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- import { useStrategyProviderDetail } from '@/service/use-strategy'
- import useNodeCrud from '../_base/hooks/use-node-crud'
- import useVarList from '../_base/hooks/use-var-list'
- import useOneStepRun from '../_base/hooks/use-one-step-run'
- import type { AgentNodeType } from './types'
- import {
- useNodesReadOnly,
- } from '@/app/components/workflow/hooks'
- import { useCallback, useMemo } from 'react'
- import { type ToolVarInputs, VarType } from '../tool/types'
- import { useCheckInstalled, useFetchPluginsInMarketPlaceByIds } from '@/service/use-plugins'
- import type { Var } from '../../types'
- import { VarType as VarKindType } from '../../types'
- import useAvailableVarList from '../_base/hooks/use-available-var-list'
- export type StrategyStatus = {
- plugin: {
- source: 'external' | 'marketplace'
- installed: boolean
- }
- isExistInPlugin: boolean
- }
- export const useStrategyInfo = (
- strategyProviderName?: string,
- strategyName?: string,
- ) => {
- const strategyProvider = useStrategyProviderDetail(
- strategyProviderName || '',
- { retry: false },
- )
- const strategy = strategyProvider.data?.declaration.strategies.find(
- str => str.identity.name === strategyName,
- )
- const marketplace = useFetchPluginsInMarketPlaceByIds([strategyProviderName!], {
- retry: false,
- })
- const strategyStatus: StrategyStatus | undefined = useMemo(() => {
- if (strategyProvider.isLoading || marketplace.isLoading)
- return undefined
- const strategyExist = !!strategy
- const isPluginInstalled = !strategyProvider.isError
- const isInMarketplace = !!marketplace.data?.data.plugins.at(0)
- return {
- plugin: {
- source: isInMarketplace ? 'marketplace' : 'external',
- installed: isPluginInstalled,
- },
- isExistInPlugin: strategyExist,
- }
- }, [strategy, marketplace, strategyProvider.isError, strategyProvider.isLoading])
- const refetch = useCallback(() => {
- strategyProvider.refetch()
- marketplace.refetch()
- }, [marketplace, strategyProvider])
- return {
- strategyProvider,
- strategy,
- strategyStatus,
- refetch,
- }
- }
- const useConfig = (id: string, payload: AgentNodeType) => {
- const { nodesReadOnly: readOnly } = useNodesReadOnly()
- const { inputs, setInputs } = useNodeCrud<AgentNodeType>(id, payload)
- // variables
- const { handleVarListChange, handleAddVariable } = useVarList<AgentNodeType>({
- inputs,
- setInputs,
- })
- const {
- strategyStatus: currentStrategyStatus,
- strategy: currentStrategy,
- strategyProvider,
- } = useStrategyInfo(
- inputs.agent_strategy_provider_name,
- inputs.agent_strategy_name,
- )
- const pluginId = inputs.agent_strategy_provider_name?.split('/').splice(0, 2).join('/')
- const pluginDetail = useCheckInstalled({
- pluginIds: [pluginId!],
- enabled: Boolean(pluginId),
- })
- const formData = useMemo(() => {
- return Object.fromEntries(
- Object.entries(inputs.agent_parameters || {}).map(([key, value]) => {
- return [key, value.value]
- }),
- )
- }, [inputs.agent_parameters])
- const onFormChange = (value: Record<string, any>) => {
- const res: ToolVarInputs = {}
- Object.entries(value).forEach(([key, val]) => {
- res[key] = {
- type: VarType.constant,
- value: val,
- }
- })
- setInputs({
- ...inputs,
- agent_parameters: res,
- })
- }
- // vars
- const filterMemoryPromptVar = useCallback((varPayload: Var) => {
- return [
- VarKindType.arrayObject,
- VarKindType.array,
- VarKindType.number,
- VarKindType.string,
- VarKindType.secret,
- VarKindType.arrayString,
- VarKindType.arrayNumber,
- VarKindType.file,
- VarKindType.arrayFile,
- ].includes(varPayload.type)
- }, [])
- const {
- availableVars,
- availableNodesWithParent,
- } = useAvailableVarList(id, {
- onlyLeafNodeVar: false,
- filterVar: filterMemoryPromptVar,
- })
- // single run
- const {
- isShowSingleRun,
- showSingleRun,
- hideSingleRun,
- toVarInputs,
- runningStatus,
- handleRun,
- handleStop,
- runInputData,
- setRunInputData,
- runResult,
- getInputVars,
- } = useOneStepRun<AgentNodeType>({
- id,
- data: inputs,
- defaultRunInputData: {},
- })
- const allVarStrArr = (() => {
- const arr = currentStrategy?.parameters.filter(item => item.type === 'string').map((item) => {
- return formData[item.name]
- }) || []
- return arr
- })()
- const varInputs = (() => {
- const vars = getInputVars(allVarStrArr)
- return vars
- })()
- const outputSchema = useMemo(() => {
- const res: any[] = []
- if (!inputs.output_schema)
- return []
- Object.keys(inputs.output_schema.properties).forEach((outputKey) => {
- const output = inputs.output_schema.properties[outputKey]
- res.push({
- name: outputKey,
- type: output.type === 'array'
- ? `Array[${output.items?.type.slice(0, 1).toLocaleUpperCase()}${output.items?.type.slice(1)}]`
- : `${output.type.slice(0, 1).toLocaleUpperCase()}${output.type.slice(1)}`,
- description: output.description,
- })
- })
- return res
- }, [inputs.output_schema])
- return {
- readOnly,
- inputs,
- setInputs,
- handleVarListChange,
- handleAddVariable,
- currentStrategy,
- formData,
- onFormChange,
- currentStrategyStatus,
- strategyProvider: strategyProvider.data,
- pluginDetail: pluginDetail.data?.plugins.at(0),
- availableVars,
- availableNodesWithParent,
- isShowSingleRun,
- showSingleRun,
- hideSingleRun,
- toVarInputs,
- runningStatus,
- handleRun,
- handleStop,
- runInputData,
- setRunInputData,
- runResult,
- varInputs,
- outputSchema,
- }
- }
- export default useConfig
|