Open doufa opened 2 weeks ago
To resolve the issue of unnecessary default dataset_ids
in the "Knowledge Retrieval + Chatbot" and "Question Classifier + Knowledge + Chatbot" app templates, you need to ensure that the default values for the dataset_ids
are correctly set to an empty array. Here are the steps and code adjustments you can make:
Set Default Values for Knowledge Retrieval Node:
Ensure the dataset_ids
default value is an empty array:
defaultValue: {
query_variable_selector: [],
dataset_ids: [],
retrieval_mode: RETRIEVE_TYPE.oneWay,
}
Validation Logic for Knowledge Retrieval Node: Ensure the validation logic checks for the presence of required fields:
checkValid(payload: KnowledgeRetrievalNodeType, t: any) {
let errorMessages = ''
if (!errorMessages && (!payload.query_variable_selector || payload.query_variable_selector.length === 0))
errorMessages = t(`${i18nPrefix}.errorMsg.fieldRequired`, { field: t(`${i18nPrefix}.nodes.knowledgeRetrieval.queryVariable`) })
if (!errorMessages && (!payload.dataset_ids || payload.dataset_ids.length === 0))
errorMessages = t(`${i18nPrefix}.errorMsg.fieldRequired`, { field: t(`${i18nPrefix}.nodes.knowledgeRetrieval.knowledge`) })
if (!errorMessages && payload.retrieval_mode === RETRIEVE_TYPE.multiWay && !payload.multiple_retrieval_config?.reranking_model?.provider)
errorMessages = t(`${i18nPrefix}.errorMsg.fieldRequired`, { field: t(`${i18nPrefix}.errorMsg.fields.rerankModel`) })
if (!errorMessages && payload.retrieval_mode === RETRIEVE_TYPE.oneWay && !payload.single_retrieval_config?.model?.provider)
errorMessages = t(`${i18nPrefix}.errorMsg.fieldRequired`, { field: t('common.modelProvider.systemReasoningModel.key') })
return {
isValid: !errorMessages,
errorMessage: errorMessages,
}
}
Set Default Values for Question Classifier Node:
Ensure the dataset_ids
default value is an empty array:
defaultValue: {
query_variable_selector: [],
model: {
provider: '',
name: '',
mode: 'chat',
completion_params: {
temperature: 0.7,
},
},
classes: [
{
id: '1',
name: '',
},
{
id: '2',
name: '',
},
],
}
Validation Logic for Question Classifier Node: Ensure the validation logic checks for the presence of required fields:
checkValid(payload: QuestionClassifierNodeType, t: any) {
let errorMessages = ''
if (!errorMessages && (!payload.query_variable_selector || payload.query_variable_selector.length === 0))
errorMessages = t(`${i18nPrefix}.errorMsg.fieldRequired`, { field: t(`${i18nPrefix}.nodes.questionClassifiers.inputVars`) })
if (!errorMessages && !payload.model.provider)
errorMessages = t(`${i18nPrefix}.errorMsg.fieldRequired`, { field: t(`${i18nPrefix}.nodes.questionClassifiers.model`) })
if (!errorMessages && (!payload.classes || payload.classes.length === 0))
errorMessages = t(`${i18nPrefix}.errorMsg.fieldRequired`, { field: t(`${i18nPrefix}.nodes.questionClassifiers.class`) })
if (!errorMessages && (payload.classes.some(item => !item.name)))
errorMessages = t(`${i18nPrefix}.errorMsg.fieldRequired`, { field: t(`${i18nPrefix}.nodes.questionClassifiers.topicName`) })
return {
isValid: !errorMessages,
errorMessage: errorMessages,
}
}
By ensuring these default values and validation checks are correctly implemented, you should be able to resolve the issue of unnecessary default dataset_ids
and prevent the app from crashing when configuring empty knowledge items [1][2].
To continue talking to Dosu, mention @dosu.
Self Checks
Dify version
0.6.11
Cloud or Self Hosted
Cloud
Steps to reproduce
✔️ Expected Behavior
Knowledge selected as the user expected
❌ Actual Behavior
empty knowledge selected as default in template "Knowledge Retreival + Chatbot" has one default knowlege "Create app from Question Classifier + Knowledge + Chatbot" has two empty default knowledge