aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-05-18 20:22:59 +0000
committerMohamed Bassem <me@mbassem.com>2025-05-18 20:22:59 +0000
commit2743d9e38ecfdbf757d4d2f97bcf09d601245b59 (patch)
tree3119581aafce5321aaba9719ba3b2597d000d564 /packages/shared
parenta5ae67c241d8cdd452acd4d98800ec61740c041f (diff)
downloadkarakeep-2743d9e38ecfdbf757d4d2f97bcf09d601245b59.tar.zst
feat: Add AI auto summarization. Fixes #1163
Diffstat (limited to '')
-rw-r--r--packages/shared-react/utils/bookmarkUtils.ts13
-rw-r--r--packages/shared/config.ts4
-rw-r--r--packages/shared/queues.ts5
-rw-r--r--packages/shared/types/bookmarks.ts1
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(),
});