fix: metadata not set in llm prompt

This commit is contained in:
Joel
2026-01-27 15:35:11 +08:00
parent 57a588265a
commit 046aff93f6
2 changed files with 30 additions and 41 deletions

View File

@ -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])

View File

@ -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>,