aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-07-13 10:33:47 +0000
committerMohamed Bassem <me@mbassem.com>2025-07-13 20:44:00 +0000
commit4ba3e8047a5b1f160169617187436c09e91662ec (patch)
tree6596ef1c5a66840e335289f9c9447ab07671cca2
parentd1d5263486f96db578aad918a59007045c3c077f (diff)
downloadkarakeep-4ba3e8047a5b1f160169617187436c09e91662ec.tar.zst
fix: Fix the types of the bookmark types in the db query
-rw-r--r--apps/workers/workers/assetPreprocessingWorker.ts10
-rw-r--r--apps/workers/workers/inference/tagging.ts12
-rw-r--r--packages/db/schema.ts15
-rw-r--r--packages/trpc/routers/bookmarks.ts6
4 files changed, 27 insertions, 16 deletions
diff --git a/apps/workers/workers/assetPreprocessingWorker.ts b/apps/workers/workers/assetPreprocessingWorker.ts
index c3ecd1e0..f36908cc 100644
--- a/apps/workers/workers/assetPreprocessingWorker.ts
+++ b/apps/workers/workers/assetPreprocessingWorker.ts
@@ -189,6 +189,11 @@ async function extractAndSaveImageText(
bookmark: NonNullable<Awaited<ReturnType<typeof getBookmark>>>,
isFixMode: boolean,
): Promise<boolean> {
+ if (!bookmark.asset) {
+ throw new Error(
+ `[assetPreprocessing][${jobId}] Bookmark ${bookmark.id} has no asset attached`,
+ );
+ }
{
const alreadyHasText = !!bookmark.asset.content;
if (alreadyHasText && isFixMode) {
@@ -232,6 +237,11 @@ async function extractAndSavePDFText(
bookmark: NonNullable<Awaited<ReturnType<typeof getBookmark>>>,
isFixMode: boolean,
): Promise<boolean> {
+ if (!bookmark.asset) {
+ throw new Error(
+ `[assetPreprocessing][${jobId}] Bookmark ${bookmark.id} has no asset attached`,
+ );
+ }
{
const alreadyHasText = !!bookmark.asset.content;
if (alreadyHasText && isFixMode) {
diff --git a/apps/workers/workers/inference/tagging.ts b/apps/workers/workers/inference/tagging.ts
index 3c7b5adb..47419a1f 100644
--- a/apps/workers/workers/inference/tagging.ts
+++ b/apps/workers/workers/inference/tagging.ts
@@ -118,6 +118,11 @@ async function inferTagsFromImage(
inferenceClient: InferenceClient,
abortSignal: AbortSignal,
) {
+ if (!bookmark.asset) {
+ throw new Error(
+ `[inference][${jobId}] Bookmark ${bookmark.id} has no asset attached`,
+ );
+ }
const { asset, metadata } = await readAsset({
userId: bookmark.userId,
assetId: bookmark.asset.assetId,
@@ -199,11 +204,16 @@ function containsTagsPlaceholder(prompts: { text: string }[]): boolean {
}
async function inferTagsFromPDF(
- _jobId: string,
+ jobId: string,
bookmark: NonNullable<Awaited<ReturnType<typeof fetchBookmark>>>,
inferenceClient: InferenceClient,
abortSignal: AbortSignal,
) {
+ if (!bookmark.asset) {
+ throw new Error(
+ `[inference][${jobId}] Bookmark ${bookmark.id} has no asset attached`,
+ );
+ }
const prompt = buildTextPrompt(
serverConfig.inference.inferredTagLang,
await fetchCustomPrompts(bookmark.userId, "text"),
diff --git a/packages/db/schema.ts b/packages/db/schema.ts
index 6dacdec6..540c4c82 100644
--- a/packages/db/schema.ts
+++ b/packages/db/schema.ts
@@ -649,18 +649,9 @@ export const bookmarkRelations = relations(bookmarks, ({ many, one }) => ({
fields: [bookmarks.userId],
references: [users.id],
}),
- link: one(bookmarkLinks, {
- fields: [bookmarks.id],
- references: [bookmarkLinks.id],
- }),
- text: one(bookmarkTexts, {
- fields: [bookmarks.id],
- references: [bookmarkTexts.id],
- }),
- asset: one(bookmarkAssets, {
- fields: [bookmarks.id],
- references: [bookmarkAssets.id],
- }),
+ link: one(bookmarkLinks),
+ text: one(bookmarkTexts),
+ asset: one(bookmarkAssets),
tagsOnBookmarks: many(tagsOnBookmarks),
bookmarksInLists: many(bookmarksInLists),
assets: many(assets),
diff --git a/packages/trpc/routers/bookmarks.ts b/packages/trpc/routers/bookmarks.ts
index 9aa9ec1e..ef6ce396 100644
--- a/packages/trpc/routers/bookmarks.ts
+++ b/packages/trpc/routers/bookmarks.ts
@@ -187,7 +187,7 @@ async function toZodSchema(
let content: ZBookmarkContent = {
type: BookmarkTypes.UNKNOWN,
};
- if (bookmark.link) {
+ if (link) {
content = {
type: BookmarkTypes.LINK,
screenshotAssetId: assets.find(
@@ -219,7 +219,7 @@ async function toZodSchema(
dateModified: link.dateModified,
};
}
- if (bookmark.text) {
+ if (text) {
content = {
type: BookmarkTypes.TEXT,
// It's ok to include the text content as it's usually not big and is used to render the text bookmark card.
@@ -227,7 +227,7 @@ async function toZodSchema(
sourceUrl: text.sourceUrl,
};
}
- if (bookmark.asset) {
+ if (asset) {
content = {
type: BookmarkTypes.ASSET,
assetType: asset.assetType,