diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-05-18 20:22:59 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-05-18 20:22:59 +0000 |
| commit | 2743d9e38ecfdbf757d4d2f97bcf09d601245b59 (patch) | |
| tree | 3119581aafce5321aaba9719ba3b2597d000d564 /packages/shared | |
| parent | a5ae67c241d8cdd452acd4d98800ec61740c041f (diff) | |
| download | karakeep-2743d9e38ecfdbf757d4d2f97bcf09d601245b59.tar.zst | |
feat: Add AI auto summarization. Fixes #1163
Diffstat (limited to '')
| -rw-r--r-- | packages/shared-react/utils/bookmarkUtils.ts | 13 | ||||
| -rw-r--r-- | packages/shared/config.ts | 4 | ||||
| -rw-r--r-- | packages/shared/queues.ts | 5 | ||||
| -rw-r--r-- | packages/shared/types/bookmarks.ts | 1 |
4 files changed, 20 insertions, 3 deletions
diff --git a/packages/shared-react/utils/bookmarkUtils.ts b/packages/shared-react/utils/bookmarkUtils.ts index 1f840f78..08a6a5e9 100644 --- a/packages/shared-react/utils/bookmarkUtils.ts +++ b/packages/shared-react/utils/bookmarkUtils.ts @@ -35,8 +35,19 @@ export function isBookmarkStillTagging(bookmark: ZBookmark) { ); } +export function isBookmarkStillSummarizing(bookmark: ZBookmark) { + return ( + bookmark.summarizationStatus == "pending" && + Date.now().valueOf() - bookmark.createdAt.valueOf() < MAX_LOADING_MSEC + ); +} + export function isBookmarkStillLoading(bookmark: ZBookmark) { - return isBookmarkStillTagging(bookmark) || isBookmarkStillCrawling(bookmark); + return ( + isBookmarkStillTagging(bookmark) || + isBookmarkStillCrawling(bookmark) || + isBookmarkStillSummarizing(bookmark) + ); } export function getSourceUrl(bookmark: ZBookmark) { diff --git a/packages/shared/config.ts b/packages/shared/config.ts index 046583c6..a4548348 100644 --- a/packages/shared/config.ts +++ b/packages/shared/config.ts @@ -40,6 +40,8 @@ const allEnv = z.object({ INFERENCE_OUTPUT_SCHEMA: z .enum(["structured", "json", "plain"]) .default("structured"), + INFERENCE_ENABLE_AUTO_TAGGING: stringBool("true"), + INFERENCE_ENABLE_AUTO_SUMMARIZATION: stringBool("false"), OCR_CACHE_DIR: z.string().optional(), OCR_LANGS: z .string() @@ -120,6 +122,8 @@ const serverConfigSchema = allEnv.transform((val) => { ? ("structured" as const) : ("plain" as const) : val.INFERENCE_OUTPUT_SCHEMA, + enableAutoTagging: val.INFERENCE_ENABLE_AUTO_TAGGING, + enableAutoSummarization: val.INFERENCE_ENABLE_AUTO_SUMMARIZATION, }, embedding: { textModel: val.EMBEDDING_TEXT_MODEL, diff --git a/packages/shared/queues.ts b/packages/shared/queues.ts index 571df568..bbf69428 100644 --- a/packages/shared/queues.ts +++ b/packages/shared/queues.ts @@ -32,9 +32,10 @@ export const LinkCrawlerQueue = new SqliteQueue<ZCrawlLinkRequest>( }, ); -// OpenAI Worker +// Inference Worker export const zOpenAIRequestSchema = z.object({ bookmarkId: z.string(), + type: z.enum(["summarize", "tag"]).default("tag"), }); export type ZOpenAIRequest = z.infer<typeof zOpenAIRequestSchema>; @@ -195,7 +196,7 @@ export async function triggerWebhook( }); } -// RuleEgine worker +// RuleEngine worker export const zRuleEngineRequestSchema = z.object({ bookmarkId: z.string(), events: z.array(zRuleEngineEventSchema), diff --git a/packages/shared/types/bookmarks.ts b/packages/shared/types/bookmarks.ts index 709fd431..5fe77278 100644 --- a/packages/shared/types/bookmarks.ts +++ b/packages/shared/types/bookmarks.ts @@ -87,6 +87,7 @@ export const zBareBookmarkSchema = z.object({ archived: z.boolean(), favourited: z.boolean(), taggingStatus: z.enum(["success", "failure", "pending"]).nullable(), + summarizationStatus: z.enum(["success", "failure", "pending"]).nullable(), note: z.string().nullish(), summary: z.string().nullish(), }); |
