diff options
Diffstat (limited to 'packages/shared/config.ts')
| -rw-r--r-- | packages/shared/config.ts | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/packages/shared/config.ts b/packages/shared/config.ts index 60beae1e..cfcf1532 100644 --- a/packages/shared/config.ts +++ b/packages/shared/config.ts @@ -58,6 +58,8 @@ const allEnv = z.object({ TURNSTILE_SECRET_KEY: z.string().optional(), OPENAI_API_KEY: z.string().optional(), OPENAI_BASE_URL: z.string().url().optional(), + OPENAI_PROXY_URL: z.string().url().optional(), + OPENAI_SERVICE_TIER: z.enum(["auto", "default", "flex"]).optional(), OLLAMA_BASE_URL: z.string().url().optional(), OLLAMA_KEEP_ALIVE: z.string().optional(), INFERENCE_JOB_TIMEOUT_SEC: z.coerce.number().default(30), @@ -80,6 +82,7 @@ const allEnv = z.object({ .default("eng") .transform((val) => val.split(",")), OCR_CONFIDENCE_THRESHOLD: z.coerce.number().default(50), + OCR_USE_LLM: stringBool("false"), CRAWLER_HEADLESS_BROWSER: stringBool("true"), BROWSER_WEB_URL: z.string().optional(), BROWSER_WEBSOCKET_URL: z.string().optional(), @@ -93,10 +96,12 @@ const allEnv = z.object({ SEARCH_JOB_TIMEOUT_SEC: z.coerce.number().default(30), WEBHOOK_NUM_WORKERS: z.coerce.number().default(1), ASSET_PREPROCESSING_NUM_WORKERS: z.coerce.number().default(1), + ASSET_PREPROCESSING_JOB_TIMEOUT_SEC: z.coerce.number().default(60), RULE_ENGINE_NUM_WORKERS: z.coerce.number().default(1), CRAWLER_DOWNLOAD_BANNER_IMAGE: stringBool("true"), CRAWLER_STORE_SCREENSHOT: stringBool("true"), CRAWLER_FULL_PAGE_SCREENSHOT: stringBool("false"), + CRAWLER_STORE_PDF: stringBool("false"), CRAWLER_FULL_PAGE_ARCHIVE: stringBool("false"), CRAWLER_VIDEO_DOWNLOAD: stringBool("false"), CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE: z.coerce.number().default(50), @@ -122,8 +127,11 @@ const allEnv = z.object({ INFERENCE_LANG: z.string().default("english"), WEBHOOK_TIMEOUT_SEC: z.coerce.number().default(5), WEBHOOK_RETRY_TIMES: z.coerce.number().int().min(0).default(3), + MAX_RSS_FEEDS_PER_USER: z.coerce.number().default(1000), + MAX_WEBHOOKS_PER_USER: z.coerce.number().default(100), // Build only flag SERVER_VERSION: z.string().optional(), + CHANGELOG_VERSION: z.string().optional(), DISABLE_NEW_RELEASE_CHECK: stringBool("false"), // A flag to detect if the user is running in the old separete containers setup @@ -205,6 +213,12 @@ const allEnv = z.object({ // Database configuration DB_WAL_MODE: stringBool("false"), + + // OpenTelemetry tracing configuration + OTEL_TRACING_ENABLED: stringBool("false"), + OTEL_EXPORTER_OTLP_ENDPOINT: z.string().url().optional(), + OTEL_SERVICE_NAME: z.string().default("karakeep"), + OTEL_SAMPLE_RATE: z.coerce.number().min(0).max(1).default(1.0), }); const serverConfigSchema = allEnv.transform((val, ctx) => { @@ -264,6 +278,8 @@ const serverConfigSchema = allEnv.transform((val, ctx) => { fetchTimeoutSec: val.INFERENCE_FETCH_TIMEOUT_SEC, openAIApiKey: val.OPENAI_API_KEY, openAIBaseUrl: val.OPENAI_BASE_URL, + openAIProxyUrl: val.OPENAI_PROXY_URL, + openAIServiceTier: val.OPENAI_SERVICE_TIER, ollamaBaseUrl: val.OLLAMA_BASE_URL, ollamaKeepAlive: val.OLLAMA_KEEP_ALIVE, textModel: val.INFERENCE_TEXT_MODEL, @@ -296,6 +312,7 @@ const serverConfigSchema = allEnv.transform((val, ctx) => { downloadBannerImage: val.CRAWLER_DOWNLOAD_BANNER_IMAGE, storeScreenshot: val.CRAWLER_STORE_SCREENSHOT, fullPageScreenshot: val.CRAWLER_FULL_PAGE_SCREENSHOT, + storePdf: val.CRAWLER_STORE_PDF, fullPageArchive: val.CRAWLER_FULL_PAGE_ARCHIVE, downloadVideo: val.CRAWLER_VIDEO_DOWNLOAD, maxVideoDownloadSize: val.CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE, @@ -321,6 +338,7 @@ const serverConfigSchema = allEnv.transform((val, ctx) => { langs: val.OCR_LANGS, cacheDir: val.OCR_CACHE_DIR, confidenceThreshold: val.OCR_CONFIDENCE_THRESHOLD, + useLLM: val.OCR_USE_LLM, }, search: { numWorkers: val.SEARCH_NUM_WORKERS, @@ -338,12 +356,17 @@ const serverConfigSchema = allEnv.transform((val, ctx) => { assetsDir: val.ASSETS_DIR ?? path.join(val.DATA_DIR, "assets"), maxAssetSizeMb: val.MAX_ASSET_SIZE_MB, serverVersion: val.SERVER_VERSION, + changelogVersion: val.CHANGELOG_VERSION, disableNewReleaseCheck: val.DISABLE_NEW_RELEASE_CHECK, usingLegacySeparateContainers: val.USING_LEGACY_SEPARATE_CONTAINERS, webhook: { timeoutSec: val.WEBHOOK_TIMEOUT_SEC, retryTimes: val.WEBHOOK_RETRY_TIMES, numWorkers: val.WEBHOOK_NUM_WORKERS, + maxWebhooksPerUser: val.MAX_WEBHOOKS_PER_USER, + }, + feeds: { + maxRssFeedsPerUser: val.MAX_RSS_FEEDS_PER_USER, }, proxy: { httpProxy: val.CRAWLER_HTTP_PROXY, @@ -353,6 +376,7 @@ const serverConfigSchema = allEnv.transform((val, ctx) => { allowedInternalHostnames: val.CRAWLER_ALLOWED_INTERNAL_HOSTNAMES, assetPreprocessing: { numWorkers: val.ASSET_PREPROCESSING_NUM_WORKERS, + jobTimeoutSec: val.ASSET_PREPROCESSING_JOB_TIMEOUT_SEC, }, ruleEngine: { numWorkers: val.RULE_ENGINE_NUM_WORKERS, @@ -399,6 +423,12 @@ const serverConfigSchema = allEnv.transform((val, ctx) => { database: { walMode: val.DB_WAL_MODE, }, + tracing: { + enabled: val.OTEL_TRACING_ENABLED, + otlpEndpoint: val.OTEL_EXPORTER_OTLP_ENDPOINT, + serviceName: val.OTEL_SERVICE_NAME, + sampleRate: val.OTEL_SAMPLE_RATE, + }, }; if (obj.auth.emailVerificationRequired && !obj.email.smtp) { ctx.addIssue({ @@ -441,6 +471,8 @@ export const clientConfig = { inference: { isConfigured: serverConfig.inference.isConfigured, inferredTagLang: serverConfig.inference.inferredTagLang, + enableAutoTagging: serverConfig.inference.enableAutoTagging, + enableAutoSummarization: serverConfig.inference.enableAutoSummarization, }, serverVersion: serverConfig.serverVersion, disableNewReleaseCheck: serverConfig.disableNewReleaseCheck, |
