Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
81 lines
2.8 KiB
JavaScript
81 lines
2.8 KiB
JavaScript
// Code Node для проверки и обработки пустого результата векторного поиска
|
||
// Добавьте этот Code Node ПОСЛЕ "Postgres PGVector Store"
|
||
|
||
// Получаем все данные из предыдущей ноды
|
||
const inputData = $input.all();
|
||
|
||
// Проверяем, есть ли результаты
|
||
const hasResults = inputData.length > 0 &&
|
||
inputData.some(item => {
|
||
// Проверяем разные возможные структуры ответа
|
||
const data = item.json;
|
||
|
||
// Если есть поле с результатами
|
||
if (data.documents && Array.isArray(data.documents) && data.documents.length > 0) {
|
||
return true;
|
||
}
|
||
|
||
// Если есть поле с метаданными
|
||
if (data.metadatas && Array.isArray(data.metadatas) && data.metadatas.length > 0) {
|
||
return true;
|
||
}
|
||
|
||
// Если есть поле ids
|
||
if (data.ids && Array.isArray(data.ids) && data.ids.length > 0) {
|
||
return true;
|
||
}
|
||
|
||
// Если есть поле output (для langchain)
|
||
if (data.output && Array.isArray(data.output) && data.output.length > 0) {
|
||
return true;
|
||
}
|
||
|
||
// Если данные сами по себе есть
|
||
if (data && typeof data === 'object' && Object.keys(data).length > 0) {
|
||
// Проверяем, что это не пустой объект
|
||
if (Object.values(data).some(val => val !== null && val !== undefined && val !== '')) {
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
});
|
||
|
||
if (!hasResults) {
|
||
// Если результатов нет - возвращаем структурированный ответ с флагом
|
||
return [{
|
||
json: {
|
||
// Флаги для обработки
|
||
isEmpty: true,
|
||
hasResults: false,
|
||
error: 'no_vector_results',
|
||
|
||
// Сообщение для логирования
|
||
message: 'Векторный поиск не нашел похожих документов',
|
||
|
||
// Сохраняем исходные данные для дальнейшей обработки
|
||
originalChatInput: $('классификатор')?.item?.json?.chatInput || '',
|
||
originalProblem: $('классификатор')?.item?.json?.output?.problem || '',
|
||
|
||
// Пустые массивы для совместимости с дальнейшими нодами
|
||
documents: [],
|
||
metadatas: [],
|
||
ids: [],
|
||
output: [],
|
||
|
||
// Метаданные для fallback логики
|
||
useFallback: true,
|
||
fallbackReason: 'no_vector_match'
|
||
}
|
||
}];
|
||
}
|
||
|
||
// Если есть результаты - возвращаем как есть, но добавляем флаг
|
||
return inputData.map(item => ({
|
||
json: {
|
||
...item.json,
|
||
isEmpty: false,
|
||
hasResults: true
|
||
}
|
||
}));
|