1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import type { FC } from 'react'
- import React from 'react'
- import { useTranslation } from 'react-i18next'
- import type { NodeProps } from 'reactflow'
- import InfoPanel from '../_base/components/info-panel'
- import { NodeSourceHandle } from '../_base/components/node-handle'
- import type { QuestionClassifierNodeType } from './types'
- import {
- useTextGenerationCurrentProviderAndModelAndModelList,
- } from '@/app/components/header/account-setting/model-provider-page/hooks'
- import ModelSelector from '@/app/components/header/account-setting/model-provider-page/model-selector'
- const i18nPrefix = 'workflow.nodes.questionClassifiers'
- const Node: FC<NodeProps<QuestionClassifierNodeType>> = (props) => {
- const { t } = useTranslation()
- const { data } = props
- const { provider, name: modelId } = data.model
- // const tempTopics = data.topics
- const topics = data.classes
- const {
- textGenerationModelList,
- } = useTextGenerationCurrentProviderAndModelAndModelList()
- const hasSetModel = provider && modelId
- if (!hasSetModel && !topics.length)
- return null
- return (
- <div className='mb-1 px-3 py-1'>
- {hasSetModel && (
- <ModelSelector
- defaultModel={{ provider, model: modelId }}
- modelList={textGenerationModelList}
- readonly
- />
- )}
- {
- !!topics.length && (
- <div className='mt-2 space-y-0.5'>
- {topics.map((topic, index) => (
- <div
- key={index}
- className='relative'
- >
- <InfoPanel
- title={`${t(`${i18nPrefix}.class`)} ${index + 1}`}
- content={topic.name}
- />
- <NodeSourceHandle
- {...props}
- handleId={topic.id}
- handleClassName='!top-1/2 !-translate-y-1/2 !-right-[21px]'
- />
- </div>
- ))}
- </div>
- )
- }
- </div>
- )
- }
- export default React.memo(Node)
|