mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-14 10:06:14 +08:00
Merge branch 'feat/llm-struct-output' of https://github.com/langgenius/dify into feat/llm-struct-output
This commit is contained in:
commit
268364a3e8
@ -1,5 +1,5 @@
|
|||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<g id="arrow-down-round-fill">
|
<g id="arrow-down-round-fill">
|
||||||
<path id="Vector" d="M6.02913 6.23572C5.08582 6.23572 4.56482 7.33027 5.15967 8.06239L7.13093 10.4885C7.57922 11.0403 8.42149 11.0403 8.86986 10.4885L10.8411 8.06239C11.4359 7.33027 10.9149 6.23572 9.97158 6.23572H6.02913Z" fill="#101828" fill-opacity="0.3"/>
|
<path id="Vector" d="M6.02913 6.23572C5.08582 6.23572 4.56482 7.33027 5.15967 8.06239L7.13093 10.4885C7.57922 11.0403 8.42149 11.0403 8.86986 10.4885L10.8411 8.06239C11.4359 7.33027 10.9149 6.23572 9.97158 6.23572H6.02913Z" fill="#101828"/>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 399 B After Width: | Height: | Size: 380 B |
@ -24,8 +24,7 @@
|
|||||||
"attributes": {
|
"attributes": {
|
||||||
"id": "Vector",
|
"id": "Vector",
|
||||||
"d": "M6.02913 6.23572C5.08582 6.23572 4.56482 7.33027 5.15967 8.06239L7.13093 10.4885C7.57922 11.0403 8.42149 11.0403 8.86986 10.4885L10.8411 8.06239C11.4359 7.33027 10.9149 6.23572 9.97158 6.23572H6.02913Z",
|
"d": "M6.02913 6.23572C5.08582 6.23572 4.56482 7.33027 5.15967 8.06239L7.13093 10.4885C7.57922 11.0403 8.42149 11.0403 8.86986 10.4885L10.8411 8.06239C11.4359 7.33027 10.9149 6.23572 9.97158 6.23572H6.02913Z",
|
||||||
"fill": "currentColor",
|
"fill": "currentColor"
|
||||||
"fill-opacity": "0.3"
|
|
||||||
},
|
},
|
||||||
"children": []
|
"children": []
|
||||||
}
|
}
|
||||||
|
@ -376,6 +376,7 @@ function Form<
|
|||||||
tooltip={tooltip?.[language] || tooltip?.en_US}
|
tooltip={tooltip?.[language] || tooltip?.en_US}
|
||||||
value={value[variable] || []}
|
value={value[variable] || []}
|
||||||
onChange={item => handleFormChange(variable, item as any)}
|
onChange={item => handleFormChange(variable, item as any)}
|
||||||
|
supportCollapse
|
||||||
/>
|
/>
|
||||||
{fieldMoreInfo?.(formSchema)}
|
{fieldMoreInfo?.(formSchema)}
|
||||||
{validating && changeKey === variable && <ValidatingTip />}
|
{validating && changeKey === variable && <ValidatingTip />}
|
||||||
|
@ -2,7 +2,6 @@ import React from 'react'
|
|||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import {
|
import {
|
||||||
RiAddLine,
|
RiAddLine,
|
||||||
RiArrowDropDownLine,
|
|
||||||
RiQuestionLine,
|
RiQuestionLine,
|
||||||
} from '@remixicon/react'
|
} from '@remixicon/react'
|
||||||
import ToolSelector from '@/app/components/plugins/plugin-detail-panel/tool-selector'
|
import ToolSelector from '@/app/components/plugins/plugin-detail-panel/tool-selector'
|
||||||
@ -13,6 +12,7 @@ import type { ToolValue } from '@/app/components/workflow/block-selector/types'
|
|||||||
import type { Node } from 'reactflow'
|
import type { Node } from 'reactflow'
|
||||||
import type { NodeOutPutVar } from '@/app/components/workflow/types'
|
import type { NodeOutPutVar } from '@/app/components/workflow/types'
|
||||||
import cn from '@/utils/classnames'
|
import cn from '@/utils/classnames'
|
||||||
|
import { ArrowDownRoundFill } from '@/app/components/base/icons/src/vender/solid/general'
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
disabled?: boolean
|
disabled?: boolean
|
||||||
@ -98,14 +98,12 @@ const MultipleToolSelector = ({
|
|||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
{supportCollapse && (
|
{supportCollapse && (
|
||||||
<div className='absolute -left-4 top-1'>
|
<ArrowDownRoundFill
|
||||||
<RiArrowDropDownLine
|
className={cn(
|
||||||
className={cn(
|
'h-4 w-4 cursor-pointer text-text-quaternary group-hover/collapse:text-text-secondary',
|
||||||
'h-4 w-4 text-text-tertiary',
|
collapse && 'rotate-[270deg]',
|
||||||
collapse && '-rotate-90',
|
)}
|
||||||
)}
|
/>
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{value.length > 0 && (
|
{value.length > 0 && (
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import type { ReactNode } from 'react'
|
import type { ReactNode } from 'react'
|
||||||
import { useState } from 'react'
|
import { useMemo, useState } from 'react'
|
||||||
import { ArrowDownRoundFill } from '@/app/components/base/icons/src/vender/solid/general'
|
import { ArrowDownRoundFill } from '@/app/components/base/icons/src/vender/solid/general'
|
||||||
import cn from '@/utils/classnames'
|
import cn from '@/utils/classnames'
|
||||||
|
|
||||||
@ -7,12 +7,12 @@ export { default as FieldCollapse } from './field-collapse'
|
|||||||
|
|
||||||
type CollapseProps = {
|
type CollapseProps = {
|
||||||
disabled?: boolean
|
disabled?: boolean
|
||||||
trigger: React.JSX.Element
|
trigger: React.JSX.Element | ((collapseIcon: React.JSX.Element | null) => React.JSX.Element)
|
||||||
children: React.JSX.Element
|
children: React.JSX.Element
|
||||||
collapsed?: boolean
|
collapsed?: boolean
|
||||||
onCollapse?: (collapsed: boolean) => void
|
onCollapse?: (collapsed: boolean) => void
|
||||||
operations?: ReactNode
|
operations?: ReactNode
|
||||||
|
hideCollapseIcon?: boolean
|
||||||
}
|
}
|
||||||
const Collapse = ({
|
const Collapse = ({
|
||||||
disabled,
|
disabled,
|
||||||
@ -21,10 +21,23 @@ const Collapse = ({
|
|||||||
collapsed,
|
collapsed,
|
||||||
onCollapse,
|
onCollapse,
|
||||||
operations,
|
operations,
|
||||||
|
hideCollapseIcon,
|
||||||
}: CollapseProps) => {
|
}: CollapseProps) => {
|
||||||
const [collapsedLocal, setCollapsedLocal] = useState(true)
|
const [collapsedLocal, setCollapsedLocal] = useState(true)
|
||||||
const collapsedMerged = collapsed !== undefined ? collapsed : collapsedLocal
|
const collapsedMerged = collapsed !== undefined ? collapsed : collapsedLocal
|
||||||
|
const collapseIcon = useMemo(() => {
|
||||||
|
if (disabled)
|
||||||
|
return null
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ArrowDownRoundFill
|
||||||
|
className={cn(
|
||||||
|
'h-4 w-4 cursor-pointer text-text-quaternary group-hover/collapse:text-text-secondary',
|
||||||
|
collapsedMerged && 'rotate-[270deg]',
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}, [collapsedMerged, disabled])
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className='group/collapse flex items-center'>
|
<div className='group/collapse flex items-center'>
|
||||||
@ -37,19 +50,12 @@ const Collapse = ({
|
|||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{trigger}
|
{typeof trigger === 'function' ? trigger(collapseIcon) : trigger}
|
||||||
<div className='h-4 w-4 shrink-0'>
|
{!hideCollapseIcon && (
|
||||||
{
|
<div className='h-4 w-4 shrink-0'>
|
||||||
!disabled && (
|
{collapseIcon}
|
||||||
<ArrowDownRoundFill
|
</div>
|
||||||
className={cn(
|
)}
|
||||||
'h-4 w-4 cursor-pointer text-text-quaternary group-hover/collapse:text-text-secondary',
|
|
||||||
collapsedMerged && 'rotate-[270deg]',
|
|
||||||
)}
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
{operations}
|
{operations}
|
||||||
</div>
|
</div>
|
||||||
|
@ -49,20 +49,23 @@ const ErrorHandle = ({
|
|||||||
disabled={!error_strategy}
|
disabled={!error_strategy}
|
||||||
collapsed={collapsed}
|
collapsed={collapsed}
|
||||||
onCollapse={setCollapsed}
|
onCollapse={setCollapsed}
|
||||||
|
hideCollapseIcon
|
||||||
trigger={
|
trigger={
|
||||||
<div className='flex grow items-center justify-between pr-4'>
|
collapseIcon => (
|
||||||
<div className='flex items-center'>
|
<div className='flex grow items-center justify-between pr-4'>
|
||||||
<div className='system-sm-semibold-uppercase mr-0.5 text-text-secondary'>
|
<div className='flex items-center'>
|
||||||
{t('workflow.nodes.common.errorHandle.title')}
|
<div className='system-sm-semibold-uppercase mr-0.5 text-text-secondary'>
|
||||||
|
{t('workflow.nodes.common.errorHandle.title')}
|
||||||
|
</div>
|
||||||
|
<Tooltip popupContent={t('workflow.nodes.common.errorHandle.tip')} />
|
||||||
|
{collapseIcon}
|
||||||
</div>
|
</div>
|
||||||
<Tooltip popupContent={t('workflow.nodes.common.errorHandle.tip')} />
|
<ErrorHandleTypeSelector
|
||||||
|
value={error_strategy || ErrorHandleTypeEnum.none}
|
||||||
|
onSelected={getHandleErrorHandleTypeChange(data)}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<ErrorHandleTypeSelector
|
)}
|
||||||
value={error_strategy || ErrorHandleTypeEnum.none}
|
|
||||||
onSelected={getHandleErrorHandleTypeChange(data)}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
>
|
>
|
||||||
<>
|
<>
|
||||||
{
|
{
|
||||||
|
@ -50,6 +50,7 @@ const ErrorHandleTypeSelector = ({
|
|||||||
>
|
>
|
||||||
<PortalToFollowElemTrigger onClick={(e) => {
|
<PortalToFollowElemTrigger onClick={(e) => {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
|
e.nativeEvent.stopImmediatePropagation()
|
||||||
setOpen(v => !v)
|
setOpen(v => !v)
|
||||||
}}>
|
}}>
|
||||||
<Button
|
<Button
|
||||||
@ -68,6 +69,7 @@ const ErrorHandleTypeSelector = ({
|
|||||||
className='flex cursor-pointer rounded-lg p-2 pr-3 hover:bg-state-base-hover'
|
className='flex cursor-pointer rounded-lg p-2 pr-3 hover:bg-state-base-hover'
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
|
e.nativeEvent.stopImmediatePropagation()
|
||||||
onSelected(option.value)
|
onSelected(option.value)
|
||||||
setOpen(false)
|
setOpen(false)
|
||||||
}}
|
}}
|
||||||
|
@ -38,7 +38,8 @@ const MetadataFilter = ({
|
|||||||
disabled={metadataFilterMode === MetadataFilteringModeEnum.disabled || metadataFilterMode === MetadataFilteringModeEnum.manual}
|
disabled={metadataFilterMode === MetadataFilteringModeEnum.disabled || metadataFilterMode === MetadataFilteringModeEnum.manual}
|
||||||
collapsed={collapsed}
|
collapsed={collapsed}
|
||||||
onCollapse={setCollapsed}
|
onCollapse={setCollapsed}
|
||||||
trigger={
|
hideCollapseIcon
|
||||||
|
trigger={collapseIcon => (
|
||||||
<div className='flex grow items-center justify-between pr-4'>
|
<div className='flex grow items-center justify-between pr-4'>
|
||||||
<div className='flex items-center'>
|
<div className='flex items-center'>
|
||||||
<div className='system-sm-semibold-uppercase mr-0.5 text-text-secondary'>
|
<div className='system-sm-semibold-uppercase mr-0.5 text-text-secondary'>
|
||||||
@ -51,6 +52,7 @@ const MetadataFilter = ({
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
{collapseIcon}
|
||||||
</div>
|
</div>
|
||||||
<div className='flex items-center'>
|
<div className='flex items-center'>
|
||||||
<MetadataFilterSelector
|
<MetadataFilterSelector
|
||||||
@ -66,7 +68,7 @@ const MetadataFilter = ({
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
)}
|
||||||
>
|
>
|
||||||
<>
|
<>
|
||||||
{
|
{
|
||||||
@ -85,8 +87,8 @@ const MetadataFilter = ({
|
|||||||
provider={metadataModelConfig?.provider || ''}
|
provider={metadataModelConfig?.provider || ''}
|
||||||
completionParams={metadataModelConfig?.completion_params || { temperature: 0.7 }}
|
completionParams={metadataModelConfig?.completion_params || { temperature: 0.7 }}
|
||||||
modelId={metadataModelConfig?.name || ''}
|
modelId={metadataModelConfig?.name || ''}
|
||||||
setModel={handleMetadataModelChange || (() => {})}
|
setModel={handleMetadataModelChange || (() => { })}
|
||||||
onCompletionParamsChange={handleMetadataCompletionParamsChange || (() => {})}
|
onCompletionParamsChange={handleMetadataCompletionParamsChange || (() => { })}
|
||||||
hideDebugWithMultipleModel
|
hideDebugWithMultipleModel
|
||||||
debugWithMultipleModel={false}
|
debugWithMultipleModel={false}
|
||||||
/>
|
/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user