mirror of https://github.com/TriliumNext/Notes
feat(llm): add utils for excluding notes from LLM
parent
ba98bd9097
commit
3fae664877
@ -0,0 +1,94 @@
|
||||
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;
|
||||
}
|
||||
Loading…
Reference in New Issue