mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-10-18 12:41:54 +08:00
95 lines
2.9 KiB
TypeScript
95 lines
2.9 KiB
TypeScript
import becca from '../../../becca/becca.js';
|
|
import type BNote from '../../../becca/entities/bnote.js';
|
|
import { LLM_CONSTANTS } from '../constants/provider_constants.js';
|
|
import log from '../../log.js';
|
|
|
|
/**
|
|
* Check if a note should be excluded from all AI/LLM features
|
|
*
|
|
* @param note - The note to check (BNote object)
|
|
* @returns true if the note should be excluded from AI features
|
|
*/
|
|
export function isNoteExcludedFromAI(note: BNote): boolean {
|
|
if (!note) {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
// Check if the note has the AI exclusion label
|
|
const hasExclusionLabel = note.hasLabel(LLM_CONSTANTS.AI_EXCLUSION.LABEL_NAME);
|
|
|
|
if (hasExclusionLabel) {
|
|
log.info(`Note ${note.noteId} (${note.title}) excluded from AI features due to ${LLM_CONSTANTS.AI_EXCLUSION.LABEL_NAME} label`);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
} catch (error) {
|
|
log.error(`Error checking AI exclusion for note ${note.noteId}: ${error}`);
|
|
return false; // Default to not excluding on error
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if a note should be excluded from AI features by noteId
|
|
*
|
|
* @param noteId - The ID of the note to check
|
|
* @returns true if the note should be excluded from AI features
|
|
*/
|
|
export function isNoteExcludedFromAIById(noteId: string): boolean {
|
|
if (!noteId) {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
const note = becca.getNote(noteId);
|
|
if (!note) {
|
|
return false;
|
|
}
|
|
return isNoteExcludedFromAI(note);
|
|
} catch (error) {
|
|
log.error(`Error checking AI exclusion for note ID ${noteId}: ${error}`);
|
|
return false; // Default to not excluding on error
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Filter out notes that are excluded from AI features
|
|
*
|
|
* @param notes - Array of notes to filter
|
|
* @returns Array of notes with AI-excluded notes removed
|
|
*/
|
|
export function filterAIExcludedNotes(notes: BNote[]): BNote[] {
|
|
return notes.filter(note => !isNoteExcludedFromAI(note));
|
|
}
|
|
|
|
/**
|
|
* Filter out note IDs that are excluded from AI features
|
|
*
|
|
* @param noteIds - Array of note IDs to filter
|
|
* @returns Array of note IDs with AI-excluded notes removed
|
|
*/
|
|
export function filterAIExcludedNoteIds(noteIds: string[]): string[] {
|
|
return noteIds.filter(noteId => !isNoteExcludedFromAIById(noteId));
|
|
}
|
|
|
|
/**
|
|
* Check if any notes in an array are excluded from AI features
|
|
*
|
|
* @param notes - Array of notes to check
|
|
* @returns true if any note should be excluded from AI features
|
|
*/
|
|
export function hasAIExcludedNotes(notes: BNote[]): boolean {
|
|
return notes.some(note => isNoteExcludedFromAI(note));
|
|
}
|
|
|
|
/**
|
|
* Get the AI exclusion label name from constants
|
|
* This can be used in UI components or other places that need to reference the label
|
|
*
|
|
* @returns The label name used for AI exclusion
|
|
*/
|
|
export function getAIExclusionLabelName(): string {
|
|
return LLM_CONSTANTS.AI_EXCLUSION.LABEL_NAME;
|
|
}
|