mirror of
https://github.com/zadam/trilium.git
synced 2025-11-03 13:09:01 +01:00
centralize LLM constants more
This commit is contained in:
parent
224cb22fe9
commit
2311c3c049
@ -14,99 +14,7 @@ import sql from "../../services/sql.js";
|
|||||||
// Import the index service for knowledge base management
|
// Import the index service for knowledge base management
|
||||||
import indexService from "../../services/llm/index_service.js";
|
import indexService from "../../services/llm/index_service.js";
|
||||||
import { CONTEXT_PROMPTS, ERROR_PROMPTS, FORMATTING_PROMPTS } from '../../services/llm/constants/llm_prompt_constants.js';
|
import { CONTEXT_PROMPTS, ERROR_PROMPTS, FORMATTING_PROMPTS } from '../../services/llm/constants/llm_prompt_constants.js';
|
||||||
|
import { LLM_CONSTANTS } from '../../services/llm/constants/provider_constants.js';
|
||||||
// LLM service constants
|
|
||||||
export const LLM_CONSTANTS = {
|
|
||||||
// Context window sizes (in characters)
|
|
||||||
CONTEXT_WINDOW: {
|
|
||||||
OLLAMA: 8000,
|
|
||||||
OPENAI: 12000,
|
|
||||||
ANTHROPIC: 15000,
|
|
||||||
VOYAGE: 12000,
|
|
||||||
DEFAULT: 6000
|
|
||||||
},
|
|
||||||
|
|
||||||
// Embedding dimensions (verify these with your actual models)
|
|
||||||
EMBEDDING_DIMENSIONS: {
|
|
||||||
OLLAMA: {
|
|
||||||
DEFAULT: 384,
|
|
||||||
NOMIC: 768,
|
|
||||||
MISTRAL: 1024
|
|
||||||
},
|
|
||||||
OPENAI: {
|
|
||||||
ADA: 1536,
|
|
||||||
DEFAULT: 1536
|
|
||||||
},
|
|
||||||
ANTHROPIC: {
|
|
||||||
CLAUDE: 1024,
|
|
||||||
DEFAULT: 1024
|
|
||||||
},
|
|
||||||
VOYAGE: {
|
|
||||||
DEFAULT: 1024
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Model-specific embedding dimensions for Ollama models
|
|
||||||
OLLAMA_MODEL_DIMENSIONS: {
|
|
||||||
"llama3": 4096,
|
|
||||||
"llama3.1": 4096,
|
|
||||||
"mistral": 4096,
|
|
||||||
"nomic": 768,
|
|
||||||
"mxbai": 1024,
|
|
||||||
"nomic-embed-text": 768,
|
|
||||||
"mxbai-embed-large": 1024,
|
|
||||||
"default": 384
|
|
||||||
},
|
|
||||||
|
|
||||||
// Model-specific context windows for Ollama models
|
|
||||||
OLLAMA_MODEL_CONTEXT_WINDOWS: {
|
|
||||||
"llama3": 8192,
|
|
||||||
"llama3.1": 8192,
|
|
||||||
"llama3.2": 8192,
|
|
||||||
"mistral": 8192,
|
|
||||||
"nomic": 32768,
|
|
||||||
"mxbai": 32768,
|
|
||||||
"nomic-embed-text": 32768,
|
|
||||||
"mxbai-embed-large": 32768,
|
|
||||||
"default": 4096
|
|
||||||
},
|
|
||||||
|
|
||||||
// Batch size configuration
|
|
||||||
BATCH_SIZE: {
|
|
||||||
OPENAI: 10, // OpenAI can handle larger batches efficiently
|
|
||||||
ANTHROPIC: 5, // More conservative for Anthropic
|
|
||||||
OLLAMA: 1, // Ollama processes one at a time
|
|
||||||
DEFAULT: 5 // Conservative default
|
|
||||||
},
|
|
||||||
|
|
||||||
// Chunking parameters
|
|
||||||
CHUNKING: {
|
|
||||||
DEFAULT_SIZE: 1500,
|
|
||||||
OLLAMA_SIZE: 1000,
|
|
||||||
DEFAULT_OVERLAP: 100,
|
|
||||||
MAX_SIZE_FOR_SINGLE_EMBEDDING: 5000
|
|
||||||
},
|
|
||||||
|
|
||||||
// Search/similarity thresholds
|
|
||||||
SIMILARITY: {
|
|
||||||
DEFAULT_THRESHOLD: 0.65,
|
|
||||||
HIGH_THRESHOLD: 0.75,
|
|
||||||
LOW_THRESHOLD: 0.5
|
|
||||||
},
|
|
||||||
|
|
||||||
// Session management
|
|
||||||
SESSION: {
|
|
||||||
CLEANUP_INTERVAL_MS: 60 * 60 * 1000, // 1 hour
|
|
||||||
SESSION_EXPIRY_MS: 12 * 60 * 60 * 1000, // 12 hours
|
|
||||||
MAX_SESSION_MESSAGES: 10
|
|
||||||
},
|
|
||||||
|
|
||||||
// Content limits
|
|
||||||
CONTENT: {
|
|
||||||
MAX_NOTE_CONTENT_LENGTH: 1500,
|
|
||||||
MAX_TOTAL_CONTENT_LENGTH: 10000
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Define basic interfaces
|
// Define basic interfaces
|
||||||
interface ChatMessage {
|
interface ChatMessage {
|
||||||
|
|||||||
@ -92,3 +92,96 @@ export const PROVIDER_CONSTANTS = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
|
// LLM service configuration constants
|
||||||
|
export const LLM_CONSTANTS = {
|
||||||
|
// Context window sizes (in characters)
|
||||||
|
CONTEXT_WINDOW: {
|
||||||
|
OLLAMA: 8000,
|
||||||
|
OPENAI: 12000,
|
||||||
|
ANTHROPIC: 15000,
|
||||||
|
VOYAGE: 12000,
|
||||||
|
DEFAULT: 6000
|
||||||
|
},
|
||||||
|
|
||||||
|
// Embedding dimensions (verify these with your actual models)
|
||||||
|
EMBEDDING_DIMENSIONS: {
|
||||||
|
OLLAMA: {
|
||||||
|
DEFAULT: 384,
|
||||||
|
NOMIC: 768,
|
||||||
|
MISTRAL: 1024
|
||||||
|
},
|
||||||
|
OPENAI: {
|
||||||
|
ADA: 1536,
|
||||||
|
DEFAULT: 1536
|
||||||
|
},
|
||||||
|
ANTHROPIC: {
|
||||||
|
CLAUDE: 1024,
|
||||||
|
DEFAULT: 1024
|
||||||
|
},
|
||||||
|
VOYAGE: {
|
||||||
|
DEFAULT: 1024
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Model-specific embedding dimensions for Ollama models
|
||||||
|
OLLAMA_MODEL_DIMENSIONS: {
|
||||||
|
"llama3": 4096,
|
||||||
|
"llama3.1": 4096,
|
||||||
|
"mistral": 4096,
|
||||||
|
"nomic": 768,
|
||||||
|
"mxbai": 1024,
|
||||||
|
"nomic-embed-text": 768,
|
||||||
|
"mxbai-embed-large": 1024,
|
||||||
|
"default": 384
|
||||||
|
},
|
||||||
|
|
||||||
|
// Model-specific context windows for Ollama models
|
||||||
|
OLLAMA_MODEL_CONTEXT_WINDOWS: {
|
||||||
|
"llama3": 8192,
|
||||||
|
"llama3.1": 8192,
|
||||||
|
"llama3.2": 8192,
|
||||||
|
"mistral": 8192,
|
||||||
|
"nomic": 32768,
|
||||||
|
"mxbai": 32768,
|
||||||
|
"nomic-embed-text": 32768,
|
||||||
|
"mxbai-embed-large": 32768,
|
||||||
|
"default": 4096
|
||||||
|
},
|
||||||
|
|
||||||
|
// Batch size configuration
|
||||||
|
BATCH_SIZE: {
|
||||||
|
OPENAI: 10, // OpenAI can handle larger batches efficiently
|
||||||
|
ANTHROPIC: 5, // More conservative for Anthropic
|
||||||
|
OLLAMA: 1, // Ollama processes one at a time
|
||||||
|
DEFAULT: 5 // Conservative default
|
||||||
|
},
|
||||||
|
|
||||||
|
// Chunking parameters
|
||||||
|
CHUNKING: {
|
||||||
|
DEFAULT_SIZE: 1500,
|
||||||
|
OLLAMA_SIZE: 1000,
|
||||||
|
DEFAULT_OVERLAP: 100,
|
||||||
|
MAX_SIZE_FOR_SINGLE_EMBEDDING: 5000
|
||||||
|
},
|
||||||
|
|
||||||
|
// Search/similarity thresholds
|
||||||
|
SIMILARITY: {
|
||||||
|
DEFAULT_THRESHOLD: 0.65,
|
||||||
|
HIGH_THRESHOLD: 0.75,
|
||||||
|
LOW_THRESHOLD: 0.5
|
||||||
|
},
|
||||||
|
|
||||||
|
// Session management
|
||||||
|
SESSION: {
|
||||||
|
CLEANUP_INTERVAL_MS: 60 * 60 * 1000, // 1 hour
|
||||||
|
SESSION_EXPIRY_MS: 12 * 60 * 60 * 1000, // 12 hours
|
||||||
|
MAX_SESSION_MESSAGES: 10
|
||||||
|
},
|
||||||
|
|
||||||
|
// Content limits
|
||||||
|
CONTENT: {
|
||||||
|
MAX_NOTE_CONTENT_LENGTH: 1500,
|
||||||
|
MAX_TOTAL_CONTENT_LENGTH: 10000
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@ -1,15 +1,16 @@
|
|||||||
import sanitizeHtml from 'sanitize-html';
|
import sanitizeHtml from 'sanitize-html';
|
||||||
import log from '../../../log.js';
|
import log from '../../../log.js';
|
||||||
import { CONTEXT_PROMPTS, FORMATTING_PROMPTS } from '../../constants/llm_prompt_constants.js';
|
import { CONTEXT_PROMPTS, FORMATTING_PROMPTS } from '../../constants/llm_prompt_constants.js';
|
||||||
|
import { LLM_CONSTANTS } from '../../constants/provider_constants.js';
|
||||||
import type { IContextFormatter, NoteSearchResult } from '../../interfaces/context_interfaces.js';
|
import type { IContextFormatter, NoteSearchResult } from '../../interfaces/context_interfaces.js';
|
||||||
|
|
||||||
// Constants for context window sizes, defines in-module to avoid circular dependencies
|
// Use constants from the centralized file
|
||||||
const CONTEXT_WINDOW = {
|
// const CONTEXT_WINDOW = {
|
||||||
OPENAI: 16000,
|
// OPENAI: 16000,
|
||||||
ANTHROPIC: 100000,
|
// ANTHROPIC: 100000,
|
||||||
OLLAMA: 4000, // Reduced to avoid issues
|
// OLLAMA: 4000, // Reduced to avoid issues
|
||||||
DEFAULT: 4000
|
// DEFAULT: 4000
|
||||||
};
|
// };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formats context data for LLM consumption
|
* Formats context data for LLM consumption
|
||||||
@ -35,10 +36,10 @@ export class ContextFormatter implements IContextFormatter {
|
|||||||
try {
|
try {
|
||||||
// Get appropriate context size based on provider
|
// Get appropriate context size based on provider
|
||||||
const maxTotalLength =
|
const maxTotalLength =
|
||||||
providerId === 'openai' ? CONTEXT_WINDOW.OPENAI :
|
providerId === 'openai' ? LLM_CONSTANTS.CONTEXT_WINDOW.OPENAI :
|
||||||
providerId === 'anthropic' ? CONTEXT_WINDOW.ANTHROPIC :
|
providerId === 'anthropic' ? LLM_CONSTANTS.CONTEXT_WINDOW.ANTHROPIC :
|
||||||
providerId === 'ollama' ? CONTEXT_WINDOW.OLLAMA :
|
providerId === 'ollama' ? LLM_CONSTANTS.CONTEXT_WINDOW.OLLAMA :
|
||||||
CONTEXT_WINDOW.DEFAULT;
|
LLM_CONSTANTS.CONTEXT_WINDOW.DEFAULT;
|
||||||
|
|
||||||
// DEBUG: Log context window size
|
// DEBUG: Log context window size
|
||||||
log.info(`Context window for provider ${providerId}: ${maxTotalLength} chars`);
|
log.info(`Context window for provider ${providerId}: ${maxTotalLength} chars`);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { NormalizationStatus } from './embeddings_interface.js';
|
import { NormalizationStatus } from './embeddings_interface.js';
|
||||||
import type { NoteEmbeddingContext } from './embeddings_interface.js';
|
import type { NoteEmbeddingContext } from './embeddings_interface.js';
|
||||||
import log from "../../log.js";
|
import log from "../../log.js";
|
||||||
import { LLM_CONSTANTS } from "../../../routes/api/llm.js";
|
import { LLM_CONSTANTS } from "../constants/provider_constants.js";
|
||||||
import options from "../../options.js";
|
import options from "../../options.js";
|
||||||
import { isBatchSizeError as checkBatchSizeError } from '../interfaces/error_interfaces.js';
|
import { isBatchSizeError as checkBatchSizeError } from '../interfaces/error_interfaces.js';
|
||||||
import type { EmbeddingModelInfo } from '../interfaces/embedding_interfaces.js';
|
import type { EmbeddingModelInfo } from '../interfaces/embedding_interfaces.js';
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import log from "../../../log.js";
|
|||||||
import { BaseEmbeddingProvider } from "../base_embeddings.js";
|
import { BaseEmbeddingProvider } from "../base_embeddings.js";
|
||||||
import type { EmbeddingConfig, EmbeddingModelInfo } from "../embeddings_interface.js";
|
import type { EmbeddingConfig, EmbeddingModelInfo } from "../embeddings_interface.js";
|
||||||
import { NormalizationStatus } from "../embeddings_interface.js";
|
import { NormalizationStatus } from "../embeddings_interface.js";
|
||||||
import { LLM_CONSTANTS } from "../../../../routes/api/llm.js";
|
import { LLM_CONSTANTS } from "../../constants/provider_constants.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ollama embedding provider implementation
|
* Ollama embedding provider implementation
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import log from "../../../log.js";
|
|||||||
import { BaseEmbeddingProvider } from "../base_embeddings.js";
|
import { BaseEmbeddingProvider } from "../base_embeddings.js";
|
||||||
import type { EmbeddingConfig, EmbeddingModelInfo } from "../embeddings_interface.js";
|
import type { EmbeddingConfig, EmbeddingModelInfo } from "../embeddings_interface.js";
|
||||||
import { NormalizationStatus } from "../embeddings_interface.js";
|
import { NormalizationStatus } from "../embeddings_interface.js";
|
||||||
import { LLM_CONSTANTS } from "../../../../routes/api/llm.js";
|
import { LLM_CONSTANTS } from "../../constants/provider_constants.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OpenAI embedding provider implementation
|
* OpenAI embedding provider implementation
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import log from "../../../log.js";
|
|||||||
import { BaseEmbeddingProvider } from "../base_embeddings.js";
|
import { BaseEmbeddingProvider } from "../base_embeddings.js";
|
||||||
import type { EmbeddingConfig, EmbeddingModelInfo } from "../embeddings_interface.js";
|
import type { EmbeddingConfig, EmbeddingModelInfo } from "../embeddings_interface.js";
|
||||||
import { NormalizationStatus } from "../embeddings_interface.js";
|
import { NormalizationStatus } from "../embeddings_interface.js";
|
||||||
import { LLM_CONSTANTS } from "../../../../routes/api/llm.js";
|
import { LLM_CONSTANTS } from "../../constants/provider_constants.js";
|
||||||
|
|
||||||
// Voyage model context window sizes - as of current API version
|
// Voyage model context window sizes - as of current API version
|
||||||
const VOYAGE_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
|
const VOYAGE_MODEL_CONTEXT_WINDOWS: Record<string, number> = {
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import sanitizeHtml from 'sanitize-html';
|
|||||||
import type { Message } from '../ai_interface.js';
|
import type { Message } from '../ai_interface.js';
|
||||||
import { BaseMessageFormatter } from './base_formatter.js';
|
import { BaseMessageFormatter } from './base_formatter.js';
|
||||||
import { PROVIDER_PROMPTS } from '../constants/llm_prompt_constants.js';
|
import { PROVIDER_PROMPTS } from '../constants/llm_prompt_constants.js';
|
||||||
|
import { LLM_CONSTANTS } from '../constants/provider_constants.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Anthropic-specific message formatter
|
* Anthropic-specific message formatter
|
||||||
@ -12,7 +13,7 @@ export class AnthropicMessageFormatter extends BaseMessageFormatter {
|
|||||||
* Maximum recommended context length for Anthropic models
|
* Maximum recommended context length for Anthropic models
|
||||||
* Claude has a very large context window
|
* Claude has a very large context window
|
||||||
*/
|
*/
|
||||||
private static MAX_CONTEXT_LENGTH = 100000;
|
private static MAX_CONTEXT_LENGTH = LLM_CONSTANTS.CONTEXT_WINDOW.ANTHROPIC;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Format messages for the Anthropic API
|
* Format messages for the Anthropic API
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import type { Message } from '../ai_interface.js';
|
|||||||
import { BaseMessageFormatter } from './base_formatter.js';
|
import { BaseMessageFormatter } from './base_formatter.js';
|
||||||
import sanitizeHtml from 'sanitize-html';
|
import sanitizeHtml from 'sanitize-html';
|
||||||
import { PROVIDER_PROMPTS, FORMATTING_PROMPTS } from '../constants/llm_prompt_constants.js';
|
import { PROVIDER_PROMPTS, FORMATTING_PROMPTS } from '../constants/llm_prompt_constants.js';
|
||||||
|
import { LLM_CONSTANTS } from '../constants/provider_constants.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ollama-specific message formatter
|
* Ollama-specific message formatter
|
||||||
@ -12,7 +13,7 @@ export class OllamaMessageFormatter extends BaseMessageFormatter {
|
|||||||
* Maximum recommended context length for Ollama
|
* Maximum recommended context length for Ollama
|
||||||
* Smaller than other providers due to Ollama's handling of context
|
* Smaller than other providers due to Ollama's handling of context
|
||||||
*/
|
*/
|
||||||
private static MAX_CONTEXT_LENGTH = 4000;
|
private static MAX_CONTEXT_LENGTH = LLM_CONSTANTS.CONTEXT_WINDOW.OLLAMA;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Format messages for the Ollama API
|
* Format messages for the Ollama API
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import sanitizeHtml from 'sanitize-html';
|
|||||||
import type { Message } from '../ai_interface.js';
|
import type { Message } from '../ai_interface.js';
|
||||||
import { BaseMessageFormatter } from './base_formatter.js';
|
import { BaseMessageFormatter } from './base_formatter.js';
|
||||||
import { PROVIDER_PROMPTS, FORMATTING_PROMPTS } from '../constants/llm_prompt_constants.js';
|
import { PROVIDER_PROMPTS, FORMATTING_PROMPTS } from '../constants/llm_prompt_constants.js';
|
||||||
|
import { LLM_CONSTANTS } from '../constants/provider_constants.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OpenAI-specific message formatter
|
* OpenAI-specific message formatter
|
||||||
@ -12,7 +13,7 @@ export class OpenAIMessageFormatter extends BaseMessageFormatter {
|
|||||||
* Maximum recommended context length for OpenAI
|
* Maximum recommended context length for OpenAI
|
||||||
* Based on GPT-4 context window size
|
* Based on GPT-4 context window size
|
||||||
*/
|
*/
|
||||||
private static MAX_CONTEXT_LENGTH = 16000;
|
private static MAX_CONTEXT_LENGTH = LLM_CONSTANTS.CONTEXT_WINDOW.OPENAI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Format messages for the OpenAI API
|
* Format messages for the OpenAI API
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user