/** * Validation functions for LLM Chat */ import options from "../../services/options.js"; import { getEmbeddingStats } from "./communication.js"; /** * Validate embedding providers configuration */ export async function validateEmbeddingProviders(validationWarning: HTMLElement): Promise { try { // Check if AI is enabled const aiEnabled = options.is('aiEnabled'); if (!aiEnabled) { validationWarning.style.display = 'none'; return; } // Get provider precedence const precedenceStr = options.get('aiProviderPrecedence') || 'openai,anthropic,ollama'; let precedenceList: string[] = []; if (precedenceStr) { if (precedenceStr.startsWith('[') && precedenceStr.endsWith(']')) { precedenceList = JSON.parse(precedenceStr); } else if (precedenceStr.includes(',')) { precedenceList = precedenceStr.split(',').map(p => p.trim()); } else { precedenceList = [precedenceStr]; } } // Get enabled providers - this is a simplification since we don't have direct DB access // We'll determine enabled status based on the presence of keys or settings const enabledProviders: string[] = []; // OpenAI is enabled if API key is set const openaiKey = options.get('openaiApiKey'); if (openaiKey) { enabledProviders.push('openai'); } // Anthropic is enabled if API key is set const anthropicKey = options.get('anthropicApiKey'); if (anthropicKey) { enabledProviders.push('anthropic'); } // Ollama is enabled if base URL is set const ollamaBaseUrl = options.get('ollamaBaseUrl'); if (ollamaBaseUrl) { enabledProviders.push('ollama'); } // Local is always available enabledProviders.push('local'); // Perform validation checks const allPrecedenceEnabled = precedenceList.every((p: string) => enabledProviders.includes(p)); // Get embedding queue status const embeddingStats = await getEmbeddingStats() as { success: boolean, stats: { totalNotesCount: number; embeddedNotesCount: number; queuedNotesCount: number; failedNotesCount: number; lastProcessedDate: string | null; percentComplete: number; } }; const queuedNotes = embeddingStats?.stats?.queuedNotesCount || 0; const hasEmbeddingsInQueue = queuedNotes > 0; // Show warning if there are issues if (!allPrecedenceEnabled || hasEmbeddingsInQueue) { let message = 'AI Provider Configuration Issues'; message += ''; message += '
Open AI Settings
'; // Update HTML content validationWarning.innerHTML = message; validationWarning.style.display = 'block'; } else { validationWarning.style.display = 'none'; } } catch (error) { console.error('Error validating embedding providers:', error); validationWarning.style.display = 'none'; } }