mirror of
https://github.com/langgenius/dify.git
synced 2026-05-03 00:48:04 +08:00
fix: metadata not set in llm prompt
This commit is contained in:
@ -147,9 +147,7 @@ const ConfigPrompt: FC<Props> = ({
|
||||
const newPrompt = produce(payload as PromptTemplateItem[], (draft) => {
|
||||
const item = draft[index]
|
||||
if (!isPromptMessageContext(item)) {
|
||||
const content = item.text
|
||||
const nextMetadata = cleanupToolMetadata(content, metadata)
|
||||
; (item as PromptItem).metadata = nextMetadata
|
||||
(item as PromptItem).metadata = metadata
|
||||
}
|
||||
})
|
||||
onChange(newPrompt)
|
||||
@ -258,12 +256,8 @@ const ConfigPrompt: FC<Props> = ({
|
||||
}, [onChange, payload])
|
||||
|
||||
const handleCompletionMetadataChange = useCallback((metadata: Record<string, unknown>) => {
|
||||
const promptItem = payload as PromptItem
|
||||
const contentKey = promptItem.edition_type === EditionType.jinja2 ? 'jinja2_text' : 'text'
|
||||
const content = (promptItem[contentKey] ?? '') as string
|
||||
const nextMetadata = cleanupToolMetadata(content, metadata)
|
||||
const newPrompt = produce(payload as PromptItem, (draft) => {
|
||||
draft.metadata = nextMetadata
|
||||
draft.metadata = metadata
|
||||
})
|
||||
onChange(newPrompt)
|
||||
}, [onChange, payload])
|
||||
|
||||
@ -44,6 +44,29 @@ const ToolPickerBlock: FC<ToolPickerBlockProps> = ({ scope = 'all' }) => {
|
||||
|
||||
const options = useMemo(() => [new ToolPickerMenuOption()], [])
|
||||
|
||||
const buildNextMetadata = useCallback((metadata: Record<string, unknown>, toolEntries: {
|
||||
configId: string
|
||||
tool: ToolDefaultValue
|
||||
}[]) => {
|
||||
const nextTools = { ...(metadata.tools || {}) } as Record<string, unknown>
|
||||
toolEntries.forEach(({ configId, tool }) => {
|
||||
const schemas = toolParametersToFormSchemas((tool.paramSchemas || []) as ToolParameter[])
|
||||
const fields = schemas.map(schema => ({
|
||||
id: schema.variable,
|
||||
value: schema.default ?? null,
|
||||
auto: schema.form === 'llm',
|
||||
}))
|
||||
nextTools[configId] = {
|
||||
type: tool.provider_type,
|
||||
configuration: { fields },
|
||||
}
|
||||
})
|
||||
return {
|
||||
...metadata,
|
||||
tools: nextTools,
|
||||
}
|
||||
}, [])
|
||||
|
||||
const insertTools = useCallback((tools: ToolDefaultValue[]) => {
|
||||
const toolEntries = tools.map(tool => ({
|
||||
configId: uuid(),
|
||||
@ -88,48 +111,20 @@ const ToolPickerBlock: FC<ToolPickerBlockProps> = ({ scope = 'all' }) => {
|
||||
|
||||
if (isUsingExternalMetadata) {
|
||||
const metadata = (toolBlockContext?.metadata || {}) as Record<string, unknown>
|
||||
const nextTools = { ...(metadata.tools || {}) } as Record<string, unknown>
|
||||
toolEntries.forEach(({ configId, tool }) => {
|
||||
const schemas = toolParametersToFormSchemas((tool.paramSchemas || []) as ToolParameter[])
|
||||
const fields = schemas.map(schema => ({
|
||||
id: schema.variable,
|
||||
value: schema.default ?? null,
|
||||
auto: schema.form === 'llm',
|
||||
}))
|
||||
nextTools[configId] = {
|
||||
type: tool.provider_type,
|
||||
configuration: { fields },
|
||||
}
|
||||
})
|
||||
toolBlockContext?.onMetadataChange?.({
|
||||
...metadata,
|
||||
tools: nextTools,
|
||||
})
|
||||
const nextMetadata = buildNextMetadata(metadata, toolEntries)
|
||||
toolBlockContext?.onMetadataChange?.(nextMetadata)
|
||||
return
|
||||
}
|
||||
const { activeTabId, fileMetadata, setDraftMetadata, pinTab } = storeApi.getState()
|
||||
if (!activeTabId || activeTabId === START_TAB_ID)
|
||||
return
|
||||
const metadata = (fileMetadata.get(activeTabId) || {}) as Record<string, unknown>
|
||||
const nextTools = { ...(metadata.tools || {}) } as Record<string, unknown>
|
||||
toolEntries.forEach(({ configId, tool }) => {
|
||||
const schemas = toolParametersToFormSchemas((tool.paramSchemas || []) as ToolParameter[])
|
||||
const fields = schemas.map(schema => ({
|
||||
id: schema.variable,
|
||||
value: schema.default ?? null,
|
||||
auto: schema.form === 'llm',
|
||||
}))
|
||||
nextTools[configId] = {
|
||||
type: tool.provider_type, // === CollectionType.mcp ? 'mcp' : 'builtin'
|
||||
configuration: { fields },
|
||||
}
|
||||
})
|
||||
const nextMetadata = buildNextMetadata(metadata, toolEntries)
|
||||
setDraftMetadata(activeTabId, {
|
||||
...metadata,
|
||||
tools: nextTools,
|
||||
...nextMetadata,
|
||||
})
|
||||
pinTab(activeTabId)
|
||||
}, [checkForTriggerMatch, editor, isUsingExternalMetadata, storeApi, toolBlockContext])
|
||||
}, [buildNextMetadata, checkForTriggerMatch, editor, isUsingExternalMetadata, storeApi, toolBlockContext])
|
||||
|
||||
const renderMenu = useCallback((
|
||||
anchorElementRef: React.RefObject<HTMLElement | null>,
|
||||
|
||||
Reference in New Issue
Block a user