@realtimex/folio 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/src/routes/ingestions.ts +2 -5
- package/api/src/routes/settings.ts +2 -0
- package/api/src/services/IngestionService.ts +18 -12
- package/api/src/services/ModelCapabilityService.ts +12 -2
- package/api/src/services/supabase.ts +2 -0
- package/dist/api/src/routes/ingestions.js +2 -5
- package/dist/api/src/routes/settings.js +2 -0
- package/dist/api/src/services/IngestionService.js +12 -12
- package/dist/api/src/services/ModelCapabilityService.js +6 -2
- package/dist/assets/index-Cj989Mcp.js +113 -0
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/supabase/functions/api-v1-settings/index.ts +2 -0
- package/supabase/migrations/20260302000000_add_ingestion_llm_settings.sql +12 -0
- package/dist/assets/index-CLpalZvv.js +0 -113
|
@@ -209,14 +209,11 @@ router.post(
|
|
|
209
209
|
}
|
|
210
210
|
const { data: settingsRow } = await req.supabase
|
|
211
211
|
.from("user_settings")
|
|
212
|
-
.select("llm_provider, llm_model")
|
|
212
|
+
.select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model")
|
|
213
213
|
.eq("user_id", req.user.id)
|
|
214
214
|
.maybeSingle();
|
|
215
215
|
|
|
216
|
-
const llmSettings =
|
|
217
|
-
llm_provider: settingsRow?.llm_provider ?? undefined,
|
|
218
|
-
llm_model: settingsRow?.llm_model ?? undefined,
|
|
219
|
-
};
|
|
216
|
+
const llmSettings = IngestionService.resolveIngestionLlmSettings(settingsRow);
|
|
220
217
|
|
|
221
218
|
const summary = await IngestionService.summarize(
|
|
222
219
|
req.params["id"] as string,
|
|
@@ -36,6 +36,8 @@ router.patch("/", asyncHandler(async (req, res) => {
|
|
|
36
36
|
const payload = {
|
|
37
37
|
llm_provider: body.llm_provider,
|
|
38
38
|
llm_model: body.llm_model,
|
|
39
|
+
ingestion_llm_provider: body.ingestion_llm_provider,
|
|
40
|
+
ingestion_llm_model: body.ingestion_llm_model,
|
|
39
41
|
sync_interval_minutes: body.sync_interval_minutes,
|
|
40
42
|
tts_auto_play: body.tts_auto_play,
|
|
41
43
|
tts_provider: body.tts_provider,
|
|
@@ -262,6 +262,18 @@ export class IngestionService {
|
|
|
262
262
|
return `data:${mimeType};base64,${base64}`;
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
+
static resolveIngestionLlmSettings(settingsRow: {
|
|
266
|
+
llm_provider?: string | null;
|
|
267
|
+
llm_model?: string | null;
|
|
268
|
+
ingestion_llm_provider?: string | null;
|
|
269
|
+
ingestion_llm_model?: string | null;
|
|
270
|
+
} | null | undefined): { llm_provider?: string; llm_model?: string } {
|
|
271
|
+
return {
|
|
272
|
+
llm_provider: settingsRow?.ingestion_llm_provider ?? settingsRow?.llm_provider ?? undefined,
|
|
273
|
+
llm_model: settingsRow?.ingestion_llm_model ?? settingsRow?.llm_model ?? undefined,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
265
277
|
private static errorToMessage(error: unknown): string {
|
|
266
278
|
if (error instanceof Error) return error.message;
|
|
267
279
|
if (typeof error === "string") return error;
|
|
@@ -426,7 +438,7 @@ export class IngestionService {
|
|
|
426
438
|
// Pre-fetch settings to decide whether we should attempt VLM.
|
|
427
439
|
const { data: triageSettingsRow } = await supabase
|
|
428
440
|
.from("user_settings")
|
|
429
|
-
.select("llm_provider, llm_model, embedding_provider, embedding_model, vision_model_capabilities")
|
|
441
|
+
.select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model, embedding_provider, embedding_model, vision_model_capabilities")
|
|
430
442
|
.eq("user_id", userId)
|
|
431
443
|
.maybeSingle();
|
|
432
444
|
const imageResolution = ModelCapabilityService.resolveVisionSupport(triageSettingsRow, "image");
|
|
@@ -502,13 +514,10 @@ export class IngestionService {
|
|
|
502
514
|
// 3. Fast Path — fetch all dependencies in parallel
|
|
503
515
|
const [userPolicies, processingSettingsRow, baselineConfig] = await Promise.all([
|
|
504
516
|
PolicyLoader.load(false, supabase),
|
|
505
|
-
supabase.from("user_settings").select("llm_provider, llm_model, embedding_provider, embedding_model").eq("user_id", userId).maybeSingle(),
|
|
517
|
+
supabase.from("user_settings").select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model, embedding_provider, embedding_model").eq("user_id", userId).maybeSingle(),
|
|
506
518
|
BaselineConfigService.getActive(supabase, userId),
|
|
507
519
|
]);
|
|
508
|
-
const llmSettings =
|
|
509
|
-
llm_provider: processingSettingsRow.data?.llm_provider ?? undefined,
|
|
510
|
-
llm_model: processingSettingsRow.data?.llm_model ?? undefined,
|
|
511
|
-
};
|
|
520
|
+
const llmSettings = this.resolveIngestionLlmSettings(processingSettingsRow.data);
|
|
512
521
|
const embedSettings = {
|
|
513
522
|
embedding_provider: processingSettingsRow.data?.embedding_provider ?? undefined,
|
|
514
523
|
embedding_model: processingSettingsRow.data?.embedding_model ?? undefined,
|
|
@@ -809,7 +818,7 @@ export class IngestionService {
|
|
|
809
818
|
|
|
810
819
|
const { data: triageSettingsRow } = await supabase
|
|
811
820
|
.from("user_settings")
|
|
812
|
-
.select("llm_provider, llm_model, embedding_provider, embedding_model, vision_model_capabilities")
|
|
821
|
+
.select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model, embedding_provider, embedding_model, vision_model_capabilities")
|
|
813
822
|
.eq("user_id", userId)
|
|
814
823
|
.maybeSingle();
|
|
815
824
|
const imageResolution = ModelCapabilityService.resolveVisionSupport(triageSettingsRow, "image");
|
|
@@ -881,13 +890,10 @@ export class IngestionService {
|
|
|
881
890
|
if (isFastPath) {
|
|
882
891
|
const [userPolicies, processingSettingsRow, baselineConfig] = await Promise.all([
|
|
883
892
|
PolicyLoader.load(false, supabase),
|
|
884
|
-
supabase.from("user_settings").select("llm_provider, llm_model, embedding_provider, embedding_model").eq("user_id", userId).maybeSingle(),
|
|
893
|
+
supabase.from("user_settings").select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model, embedding_provider, embedding_model").eq("user_id", userId).maybeSingle(),
|
|
885
894
|
BaselineConfigService.getActive(supabase, userId),
|
|
886
895
|
]);
|
|
887
|
-
const llmSettings =
|
|
888
|
-
llm_provider: processingSettingsRow.data?.llm_provider ?? undefined,
|
|
889
|
-
llm_model: processingSettingsRow.data?.llm_model ?? undefined,
|
|
890
|
-
};
|
|
896
|
+
const llmSettings = this.resolveIngestionLlmSettings(processingSettingsRow.data);
|
|
891
897
|
const embedSettings = {
|
|
892
898
|
embedding_provider: processingSettingsRow.data?.embedding_provider ?? undefined,
|
|
893
899
|
embedding_model: processingSettingsRow.data?.embedding_model ?? undefined,
|
|
@@ -23,6 +23,8 @@ type VisionCapabilityMap = Record<string, StoredVisionCapability>;
|
|
|
23
23
|
interface SettingsLike {
|
|
24
24
|
llm_provider?: string | null;
|
|
25
25
|
llm_model?: string | null;
|
|
26
|
+
ingestion_llm_provider?: string | null;
|
|
27
|
+
ingestion_llm_model?: string | null;
|
|
26
28
|
vision_model_capabilities?: unknown;
|
|
27
29
|
}
|
|
28
30
|
|
|
@@ -59,8 +61,16 @@ export class ModelCapabilityService {
|
|
|
59
61
|
settingsRow: SettingsLike | null | undefined,
|
|
60
62
|
modality: VisionCapabilityModality = "image"
|
|
61
63
|
): VisionResolution {
|
|
62
|
-
const provider = (
|
|
63
|
-
|
|
64
|
+
const provider = (
|
|
65
|
+
settingsRow?.ingestion_llm_provider ||
|
|
66
|
+
settingsRow?.llm_provider ||
|
|
67
|
+
SDKService.DEFAULT_LLM_PROVIDER
|
|
68
|
+
).trim();
|
|
69
|
+
const model = (
|
|
70
|
+
settingsRow?.ingestion_llm_model ||
|
|
71
|
+
settingsRow?.llm_model ||
|
|
72
|
+
SDKService.DEFAULT_LLM_MODEL
|
|
73
|
+
).trim();
|
|
64
74
|
const state = this.getVisionState(settingsRow?.vision_model_capabilities, provider, model, modality);
|
|
65
75
|
return {
|
|
66
76
|
provider,
|
|
@@ -94,6 +94,8 @@ export interface UserSettings {
|
|
|
94
94
|
user_id: string;
|
|
95
95
|
llm_provider: string | null;
|
|
96
96
|
llm_model: string | null;
|
|
97
|
+
ingestion_llm_provider: string | null;
|
|
98
|
+
ingestion_llm_model: string | null;
|
|
97
99
|
vision_model_capabilities: Record<string, unknown> | null;
|
|
98
100
|
sync_interval_minutes: number;
|
|
99
101
|
created_at: string;
|
|
@@ -158,13 +158,10 @@ router.post("/:id/summarize", asyncHandler(async (req, res) => {
|
|
|
158
158
|
}
|
|
159
159
|
const { data: settingsRow } = await req.supabase
|
|
160
160
|
.from("user_settings")
|
|
161
|
-
.select("llm_provider, llm_model")
|
|
161
|
+
.select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model")
|
|
162
162
|
.eq("user_id", req.user.id)
|
|
163
163
|
.maybeSingle();
|
|
164
|
-
const llmSettings =
|
|
165
|
-
llm_provider: settingsRow?.llm_provider ?? undefined,
|
|
166
|
-
llm_model: settingsRow?.llm_model ?? undefined,
|
|
167
|
-
};
|
|
164
|
+
const llmSettings = IngestionService.resolveIngestionLlmSettings(settingsRow);
|
|
168
165
|
const summary = await IngestionService.summarize(req.params["id"], req.supabase, req.user.id, llmSettings);
|
|
169
166
|
res.json({ success: true, summary });
|
|
170
167
|
}));
|
|
@@ -29,6 +29,8 @@ router.patch("/", asyncHandler(async (req, res) => {
|
|
|
29
29
|
const payload = {
|
|
30
30
|
llm_provider: body.llm_provider,
|
|
31
31
|
llm_model: body.llm_model,
|
|
32
|
+
ingestion_llm_provider: body.ingestion_llm_provider,
|
|
33
|
+
ingestion_llm_model: body.ingestion_llm_model,
|
|
32
34
|
sync_interval_minutes: body.sync_interval_minutes,
|
|
33
35
|
tts_auto_play: body.tts_auto_play,
|
|
34
36
|
tts_provider: body.tts_provider,
|
|
@@ -186,6 +186,12 @@ export class IngestionService {
|
|
|
186
186
|
const base64 = buffer.toString("base64");
|
|
187
187
|
return `data:${mimeType};base64,${base64}`;
|
|
188
188
|
}
|
|
189
|
+
static resolveIngestionLlmSettings(settingsRow) {
|
|
190
|
+
return {
|
|
191
|
+
llm_provider: settingsRow?.ingestion_llm_provider ?? settingsRow?.llm_provider ?? undefined,
|
|
192
|
+
llm_model: settingsRow?.ingestion_llm_model ?? settingsRow?.llm_model ?? undefined,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
189
195
|
static errorToMessage(error) {
|
|
190
196
|
if (error instanceof Error)
|
|
191
197
|
return error.message;
|
|
@@ -311,7 +317,7 @@ export class IngestionService {
|
|
|
311
317
|
// Pre-fetch settings to decide whether we should attempt VLM.
|
|
312
318
|
const { data: triageSettingsRow } = await supabase
|
|
313
319
|
.from("user_settings")
|
|
314
|
-
.select("llm_provider, llm_model, embedding_provider, embedding_model, vision_model_capabilities")
|
|
320
|
+
.select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model, embedding_provider, embedding_model, vision_model_capabilities")
|
|
315
321
|
.eq("user_id", userId)
|
|
316
322
|
.maybeSingle();
|
|
317
323
|
const imageResolution = ModelCapabilityService.resolveVisionSupport(triageSettingsRow, "image");
|
|
@@ -392,13 +398,10 @@ export class IngestionService {
|
|
|
392
398
|
// 3. Fast Path — fetch all dependencies in parallel
|
|
393
399
|
const [userPolicies, processingSettingsRow, baselineConfig] = await Promise.all([
|
|
394
400
|
PolicyLoader.load(false, supabase),
|
|
395
|
-
supabase.from("user_settings").select("llm_provider, llm_model, embedding_provider, embedding_model").eq("user_id", userId).maybeSingle(),
|
|
401
|
+
supabase.from("user_settings").select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model, embedding_provider, embedding_model").eq("user_id", userId).maybeSingle(),
|
|
396
402
|
BaselineConfigService.getActive(supabase, userId),
|
|
397
403
|
]);
|
|
398
|
-
const llmSettings =
|
|
399
|
-
llm_provider: processingSettingsRow.data?.llm_provider ?? undefined,
|
|
400
|
-
llm_model: processingSettingsRow.data?.llm_model ?? undefined,
|
|
401
|
-
};
|
|
404
|
+
const llmSettings = this.resolveIngestionLlmSettings(processingSettingsRow.data);
|
|
402
405
|
const embedSettings = {
|
|
403
406
|
embedding_provider: processingSettingsRow.data?.embedding_provider ?? undefined,
|
|
404
407
|
embedding_model: processingSettingsRow.data?.embedding_model ?? undefined,
|
|
@@ -668,7 +671,7 @@ export class IngestionService {
|
|
|
668
671
|
const ext = filename.toLowerCase().split('.').pop() || '';
|
|
669
672
|
const { data: triageSettingsRow } = await supabase
|
|
670
673
|
.from("user_settings")
|
|
671
|
-
.select("llm_provider, llm_model, embedding_provider, embedding_model, vision_model_capabilities")
|
|
674
|
+
.select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model, embedding_provider, embedding_model, vision_model_capabilities")
|
|
672
675
|
.eq("user_id", userId)
|
|
673
676
|
.maybeSingle();
|
|
674
677
|
const imageResolution = ModelCapabilityService.resolveVisionSupport(triageSettingsRow, "image");
|
|
@@ -745,13 +748,10 @@ export class IngestionService {
|
|
|
745
748
|
if (isFastPath) {
|
|
746
749
|
const [userPolicies, processingSettingsRow, baselineConfig] = await Promise.all([
|
|
747
750
|
PolicyLoader.load(false, supabase),
|
|
748
|
-
supabase.from("user_settings").select("llm_provider, llm_model, embedding_provider, embedding_model").eq("user_id", userId).maybeSingle(),
|
|
751
|
+
supabase.from("user_settings").select("llm_provider, llm_model, ingestion_llm_provider, ingestion_llm_model, embedding_provider, embedding_model").eq("user_id", userId).maybeSingle(),
|
|
749
752
|
BaselineConfigService.getActive(supabase, userId),
|
|
750
753
|
]);
|
|
751
|
-
const llmSettings =
|
|
752
|
-
llm_provider: processingSettingsRow.data?.llm_provider ?? undefined,
|
|
753
|
-
llm_model: processingSettingsRow.data?.llm_model ?? undefined,
|
|
754
|
-
};
|
|
754
|
+
const llmSettings = this.resolveIngestionLlmSettings(processingSettingsRow.data);
|
|
755
755
|
const embedSettings = {
|
|
756
756
|
embedding_provider: processingSettingsRow.data?.embedding_provider ?? undefined,
|
|
757
757
|
embedding_model: processingSettingsRow.data?.embedding_model ?? undefined,
|
|
@@ -9,8 +9,12 @@ export class ModelCapabilityService {
|
|
|
9
9
|
static UNSUPPORTED_CONFIRMATION_FAILURES = 2;
|
|
10
10
|
static UNSUPPORTED_SCORE_THRESHOLD = 3;
|
|
11
11
|
static resolveVisionSupport(settingsRow, modality = "image") {
|
|
12
|
-
const provider = (settingsRow?.
|
|
13
|
-
|
|
12
|
+
const provider = (settingsRow?.ingestion_llm_provider ||
|
|
13
|
+
settingsRow?.llm_provider ||
|
|
14
|
+
SDKService.DEFAULT_LLM_PROVIDER).trim();
|
|
15
|
+
const model = (settingsRow?.ingestion_llm_model ||
|
|
16
|
+
settingsRow?.llm_model ||
|
|
17
|
+
SDKService.DEFAULT_LLM_MODEL).trim();
|
|
14
18
|
const state = this.getVisionState(settingsRow?.vision_model_capabilities, provider, model, modality);
|
|
15
19
|
return {
|
|
16
20
|
provider,
|