@pellux/goodvibes-sdk 0.28.11 → 0.28.13
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/dist/_internal/contracts/artifacts/operator-contract.json +16 -1
- package/dist/_internal/contracts/generated/foundation-metadata.d.ts +1 -1
- package/dist/_internal/contracts/generated/foundation-metadata.js +1 -1
- package/dist/_internal/contracts/generated/operator-contract.d.ts.map +1 -1
- package/dist/_internal/contracts/generated/operator-contract.js +16 -1
- package/dist/_internal/platform/control-plane/method-catalog-homegraph.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/method-catalog-homegraph.js +1 -0
- package/dist/_internal/platform/control-plane/method-catalog-knowledge.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/method-catalog-knowledge.js +2 -1
- package/dist/_internal/platform/control-plane/operator-contract-schemas-homegraph.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/operator-contract-schemas-homegraph.js +3 -0
- package/dist/_internal/platform/knowledge/home-graph/ask.d.ts +1 -1
- package/dist/_internal/platform/knowledge/home-graph/ask.d.ts.map +1 -1
- package/dist/_internal/platform/knowledge/home-graph/ask.js +3 -84
- package/dist/_internal/platform/knowledge/home-graph/generated-pages.d.ts.map +1 -1
- package/dist/_internal/platform/knowledge/home-graph/generated-pages.js +39 -5
- package/dist/_internal/platform/knowledge/home-graph/service.d.ts +2 -0
- package/dist/_internal/platform/knowledge/home-graph/service.d.ts.map +1 -1
- package/dist/_internal/platform/knowledge/home-graph/service.js +20 -10
- package/dist/_internal/platform/knowledge/home-graph/types.d.ts +4 -0
- package/dist/_internal/platform/knowledge/home-graph/types.d.ts.map +1 -1
- package/dist/_internal/platform/knowledge/semantic/answer-quality.d.ts +10 -0
- package/dist/_internal/platform/knowledge/semantic/answer-quality.d.ts.map +1 -0
- package/dist/_internal/platform/knowledge/semantic/answer-quality.js +62 -0
- package/dist/_internal/platform/knowledge/semantic/answer.d.ts.map +1 -1
- package/dist/_internal/platform/knowledge/semantic/answer.js +28 -27
- package/dist/_internal/platform/knowledge/semantic/enrichment.js +6 -1
- package/dist/_internal/platform/knowledge/semantic/gap-repair.d.ts +2 -0
- package/dist/_internal/platform/knowledge/semantic/gap-repair.d.ts.map +1 -1
- package/dist/_internal/platform/knowledge/semantic/gap-repair.js +99 -65
- package/dist/_internal/platform/knowledge/semantic/self-improvement.d.ts.map +1 -1
- package/dist/_internal/platform/knowledge/semantic/self-improvement.js +9 -5
- package/dist/_internal/platform/knowledge/semantic/timeouts.d.ts +4 -0
- package/dist/_internal/platform/knowledge/semantic/timeouts.d.ts.map +1 -0
- package/dist/_internal/platform/knowledge/semantic/timeouts.js +26 -0
- package/dist/_internal/platform/knowledge/semantic/types.d.ts +4 -0
- package/dist/_internal/platform/knowledge/semantic/types.d.ts.map +1 -1
- package/dist/_internal/platform/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { hasConcreteFeatureSignal, isLowValueFeatureOrSpecText, semanticFactText } from './fact-quality.js';
|
|
2
|
+
import { splitSentences } from './utils.js';
|
|
3
|
+
export function answerNeedsFeatureGap(input) {
|
|
4
|
+
if (input.linkedObjects.length === 0)
|
|
5
|
+
return false;
|
|
6
|
+
if (input.facts.filter((fact) => !isLowValueFeatureOrSpecText(semanticFactText(fact))).length >= 3)
|
|
7
|
+
return false;
|
|
8
|
+
if (input.text && hasEnoughAnswerSignal(input.query, input.text))
|
|
9
|
+
return false;
|
|
10
|
+
const sourceText = input.sources.map((source) => `${source.title} ${source.summary ?? ''} ${source.tags.join(' ')}`).join('\n');
|
|
11
|
+
const answerText = `${input.text ?? ''}\n${sourceText}`;
|
|
12
|
+
if (/manual|specification|product|datasheet|support|zkelectronics|fullspecs|manualsnet|manua\.ls/i.test(answerText)
|
|
13
|
+
&& input.facts.length >= 2) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
export function cleanSynthesizedAnswer(text, featureIntent) {
|
|
19
|
+
if (!featureIntent)
|
|
20
|
+
return text;
|
|
21
|
+
const blocks = text.split(/\n{2,}/).map((block) => block.trim()).filter(Boolean);
|
|
22
|
+
const cleanedBlocks = blocks.map((block) => {
|
|
23
|
+
const lines = block.split(/\n/).map((line) => line.trim()).filter(Boolean);
|
|
24
|
+
const kept = lines.filter((line) => !isLowValueFeatureOrSpecText(line));
|
|
25
|
+
if (kept.length > 0 && kept.length < lines.length)
|
|
26
|
+
return kept.join('\n');
|
|
27
|
+
if (lines.length > 1)
|
|
28
|
+
return kept.join('\n');
|
|
29
|
+
const sentences = splitSentences(block, 600);
|
|
30
|
+
const keptSentences = sentences.filter((sentence) => !isLowValueFeatureOrSpecText(sentence));
|
|
31
|
+
return keptSentences.length > 0 && keptSentences.length < sentences.length
|
|
32
|
+
? keptSentences.join(' ')
|
|
33
|
+
: block;
|
|
34
|
+
}).filter(Boolean);
|
|
35
|
+
return cleanedBlocks.length > 0
|
|
36
|
+
? cleanedBlocks.join('\n\n')
|
|
37
|
+
: 'The available evidence did not contain source-backed feature or specification details after filtering manual boilerplate.';
|
|
38
|
+
}
|
|
39
|
+
function hasEnoughAnswerSignal(query, text) {
|
|
40
|
+
if (isLowValueFeatureOrSpecText(text) || !hasConcreteFeatureSignal(text))
|
|
41
|
+
return false;
|
|
42
|
+
const broadQuery = /\b(features?|specs?|specifications?|capabilities|what can|what does .* have)\b/i.test(query);
|
|
43
|
+
if (broadQuery)
|
|
44
|
+
return featureSignalFamilyCount(text) >= 3;
|
|
45
|
+
return queryFeatureTerms(query).some((term) => text.toLowerCase().includes(term));
|
|
46
|
+
}
|
|
47
|
+
function queryFeatureTerms(query) {
|
|
48
|
+
return Array.from(query.toLowerCase().matchAll(/\b(hdmi(?:\s*2\.1)?|usb|hdr10?|dolby vision|dolby|earc|arc|bluetooth|wi-?fi|ethernet|magic remote|remote|refresh|120\s*hz|60\s*hz|ports?|speakers?|audio|apps?|airplay|homekit|tuner|atsc|qam|gaming|game|vrr|allm)\b/g)).map((match) => match[1].replace(/\s+/g, ' '));
|
|
49
|
+
}
|
|
50
|
+
function featureSignalFamilyCount(text) {
|
|
51
|
+
const lower = text.toLowerCase();
|
|
52
|
+
return [
|
|
53
|
+
/\b(hdmi|earc|arc|ports?|usb|ethernet)\b/,
|
|
54
|
+
/\b(hdr|hdr10|dolby vision|hlg|filmmaker)\b/,
|
|
55
|
+
/\b(4k|8k|uhd|resolution|refresh|120\s*hz|60\s*hz|nanocell|display|screen)\b/,
|
|
56
|
+
/\b(webos|apps?|streaming|airplay|homekit|chromecast|smart tv)\b/,
|
|
57
|
+
/\b(wi-?fi|bluetooth|wireless lan)\b/,
|
|
58
|
+
/\b(audio|speakers?|dolby atmos|sound)\b/,
|
|
59
|
+
/\b(game|gaming|vrr|allm|freesync|g-sync)\b/,
|
|
60
|
+
/\b(tuner|atsc|qam|ntsc|broadcast)\b/,
|
|
61
|
+
].filter((pattern) => pattern.test(lower)).length;
|
|
62
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"answer.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/answer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAYlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,6BAA6B,EAE7B,oBAAoB,EAErB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"answer.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/answer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAYlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,6BAA6B,EAE7B,oBAAoB,EAErB,MAAM,YAAY,CAAC;AA8BpB,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC5C;AAsCD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,6BAA6B,CAAC,CA6ExC"}
|
|
@@ -3,6 +3,8 @@ import { MAX_ANSWER_EVIDENCE_CHARS, clampText, normalizeWhitespace, readRecord,
|
|
|
3
3
|
import { hasConcreteFeatureSignal, isLowValueFeatureOrSpecText, isSemanticAnswerLinkedObject, semanticFactText, } from './fact-quality.js';
|
|
4
4
|
import { inferHomeAssistantAnswerScope, nodeInHomeAssistantAnswerScope, sourceInHomeAssistantAnswerScope, } from './homeassistant-scope.js';
|
|
5
5
|
import { concreteAnswerGapSpaceId } from './answer-space.js';
|
|
6
|
+
import { answerNeedsFeatureGap, cleanSynthesizedAnswer } from './answer-quality.js';
|
|
7
|
+
import { clampTimeoutMs, withTimeoutOrNull } from './timeouts.js';
|
|
6
8
|
const GENERIC_ANSWER_INTENT_TOKENS = new Set([
|
|
7
9
|
'capabilities',
|
|
8
10
|
'capability',
|
|
@@ -55,7 +57,7 @@ export async function answerKnowledgeQuery(context, input) {
|
|
|
55
57
|
results: [],
|
|
56
58
|
};
|
|
57
59
|
}
|
|
58
|
-
const llmAnswer = await synthesizeAnswer(context.llm ?? null, input.query, mode, evidence);
|
|
60
|
+
const llmAnswer = await synthesizeAnswer(context.llm ?? null, input.query, mode, evidence, input.timeoutMs);
|
|
59
61
|
const facts = filterFactsForQuery(input.query, uniqueNodes(evidence.flatMap((item) => item.facts))).slice(0, 24);
|
|
60
62
|
const sources = uniqueSources(evidence.flatMap((item) => item.source ? [item.source] : []))
|
|
61
63
|
.slice(0, limit)
|
|
@@ -71,6 +73,18 @@ export async function answerKnowledgeQuery(context, input) {
|
|
|
71
73
|
linkedObjects,
|
|
72
74
|
});
|
|
73
75
|
const featureIntent = hasFeatureIntentForQuery(input.query);
|
|
76
|
+
const evidenceGap = featureIntent && answerNeedsFeatureGap({
|
|
77
|
+
query: input.query,
|
|
78
|
+
text: llmAnswer?.answer,
|
|
79
|
+
facts,
|
|
80
|
+
sources,
|
|
81
|
+
linkedObjects,
|
|
82
|
+
})
|
|
83
|
+
? await persistAnswerGap(context.store, gapSpaceId, input.query, 'Evidence matched the subject but did not include enough concrete source-backed feature or specification facts.', {
|
|
84
|
+
sources,
|
|
85
|
+
linkedObjects,
|
|
86
|
+
})
|
|
87
|
+
: null;
|
|
74
88
|
const text = cleanSynthesizedAnswer(llmAnswer?.answer?.trim() || renderFallbackAnswer(input.query, mode, evidence), featureIntent);
|
|
75
89
|
return {
|
|
76
90
|
ok: true,
|
|
@@ -83,7 +97,7 @@ export async function answerKnowledgeQuery(context, input) {
|
|
|
83
97
|
sources: input.includeSources === false ? [] : sources,
|
|
84
98
|
linkedObjects,
|
|
85
99
|
facts,
|
|
86
|
-
gaps,
|
|
100
|
+
gaps: evidenceGap ? uniqueNodes([...gaps, evidenceGap]) : gaps,
|
|
87
101
|
synthesized: Boolean(llmAnswer?.answer),
|
|
88
102
|
},
|
|
89
103
|
results: evidence.map(toSearchResult),
|
|
@@ -182,13 +196,16 @@ function collectAnswerEvidence(store, input, spaceId, limit) {
|
|
|
182
196
|
.sort((left, right) => right.score - left.score || left.id.localeCompare(right.id));
|
|
183
197
|
return pruneEvidence(items, limit, broadHomeAssistantAlias);
|
|
184
198
|
}
|
|
185
|
-
async function synthesizeAnswer(llm, query, mode, evidence) {
|
|
199
|
+
async function synthesizeAnswer(llm, query, mode, evidence, requestedTimeoutMs) {
|
|
186
200
|
if (!llm)
|
|
187
201
|
return null;
|
|
188
|
-
const
|
|
202
|
+
const timeoutMs = clampTimeoutMs(requestedTimeoutMs, 15_000, 1_000, 15_000);
|
|
203
|
+
const controller = new AbortController();
|
|
204
|
+
const response = await withTimeoutOrNull(llm.completeJson({
|
|
189
205
|
purpose: 'knowledge-answer-synthesis',
|
|
190
206
|
maxTokens: mode === 'detailed' ? 2200 : mode === 'concise' ? 700 : 1400,
|
|
191
|
-
|
|
207
|
+
signal: controller.signal,
|
|
208
|
+
timeoutMs,
|
|
192
209
|
systemPrompt: [
|
|
193
210
|
'You answer questions from a GoodVibes self-improving knowledge wiki.',
|
|
194
211
|
'Use only the supplied evidence. Synthesize the answer for the user intent rather than dumping snippets.',
|
|
@@ -209,7 +226,8 @@ async function synthesizeAnswer(llm, query, mode, evidence) {
|
|
|
209
226
|
gaps: [{ question: 'unanswered follow-up gap', reason: 'missing evidence', severity: 'info' }],
|
|
210
227
|
},
|
|
211
228
|
}),
|
|
212
|
-
});
|
|
229
|
+
}), timeoutMs);
|
|
230
|
+
controller.abort();
|
|
213
231
|
return normalizeLlmAnswer(response);
|
|
214
232
|
}
|
|
215
233
|
function renderEvidenceForPrompt(evidence) {
|
|
@@ -321,6 +339,7 @@ async function persistAnswerGap(store, spaceId, query, reason, context = {}) {
|
|
|
321
339
|
const subject = context.subject ?? linkedObjects[0]?.title;
|
|
322
340
|
const fingerprint = answerGapFingerprint(spaceId, query, subject, linkedObjects[0]?.id);
|
|
323
341
|
const id = `sem-answer-gap-${fingerprint}`;
|
|
342
|
+
const existing = store.getNode(id);
|
|
324
343
|
const node = await store.upsertNode({
|
|
325
344
|
id,
|
|
326
345
|
kind: 'knowledge_gap',
|
|
@@ -338,6 +357,9 @@ async function persistAnswerGap(store, spaceId, query, reason, context = {}) {
|
|
|
338
357
|
subjectFingerprint: fingerprint,
|
|
339
358
|
sourceIds: sources.map((source) => source.id),
|
|
340
359
|
linkedObjectIds: linkedObjects.map((node) => node.id),
|
|
360
|
+
repairStatus: readString(existing?.metadata.repairStatus) ?? 'open',
|
|
361
|
+
visibility: 'refinement',
|
|
362
|
+
displayRole: 'knowledge-gap',
|
|
341
363
|
}),
|
|
342
364
|
});
|
|
343
365
|
for (const source of sources) {
|
|
@@ -500,27 +522,6 @@ function evidenceWindows(text, tokens) {
|
|
|
500
522
|
}
|
|
501
523
|
return uniqueStrings(windows);
|
|
502
524
|
}
|
|
503
|
-
function cleanSynthesizedAnswer(text, featureIntent) {
|
|
504
|
-
if (!featureIntent)
|
|
505
|
-
return text;
|
|
506
|
-
const blocks = text.split(/\n{2,}/).map((block) => block.trim()).filter(Boolean);
|
|
507
|
-
const cleanedBlocks = blocks.map((block) => {
|
|
508
|
-
const lines = block.split(/\n/).map((line) => line.trim()).filter(Boolean);
|
|
509
|
-
const kept = lines.filter((line) => !isLowValueFeatureOrSpecText(line));
|
|
510
|
-
if (kept.length > 0 && kept.length < lines.length)
|
|
511
|
-
return kept.join('\n');
|
|
512
|
-
if (lines.length > 1)
|
|
513
|
-
return kept.join('\n');
|
|
514
|
-
const sentences = splitSentences(block, 600);
|
|
515
|
-
const keptSentences = sentences.filter((sentence) => !isLowValueFeatureOrSpecText(sentence));
|
|
516
|
-
return keptSentences.length > 0 && keptSentences.length < sentences.length
|
|
517
|
-
? keptSentences.join(' ')
|
|
518
|
-
: block;
|
|
519
|
-
}).filter(Boolean);
|
|
520
|
-
return cleanedBlocks.length > 0
|
|
521
|
-
? cleanedBlocks.join('\n\n')
|
|
522
|
-
: 'The available evidence did not contain source-backed feature or specification details after filtering manual boilerplate.';
|
|
523
|
-
}
|
|
524
525
|
function expandQueryTokens(tokens) {
|
|
525
526
|
const expansions = {
|
|
526
527
|
capabilities: ['capability', 'feature', 'features', 'function', 'functions', 'supports', 'specifications'],
|
|
@@ -223,8 +223,10 @@ async function persistSemanticExtraction(store, source, extraction, semantic, op
|
|
|
223
223
|
await linkRelation(store, entities, facts, relation, spaceId, semantic.extractor);
|
|
224
224
|
}
|
|
225
225
|
for (const gap of semantic.gaps.slice(0, 32)) {
|
|
226
|
+
const id = `sem-gap-${semanticHash(spaceId, source.id, gap.question)}`;
|
|
227
|
+
const existing = store.getNode(id);
|
|
226
228
|
const node = await store.upsertNode({
|
|
227
|
-
id
|
|
229
|
+
id,
|
|
228
230
|
kind: 'knowledge_gap',
|
|
229
231
|
slug: semanticSlug(`${spaceId}-gap-${gap.question}`),
|
|
230
232
|
title: gap.question,
|
|
@@ -239,6 +241,9 @@ async function persistSemanticExtraction(store, source, extraction, semantic, op
|
|
|
239
241
|
extractionId: extraction?.id,
|
|
240
242
|
extractor: semantic.extractor,
|
|
241
243
|
textHash: options.textHash,
|
|
244
|
+
repairStatus: readString(existing?.metadata.repairStatus) ?? 'open',
|
|
245
|
+
visibility: 'refinement',
|
|
246
|
+
displayRole: 'knowledge-gap',
|
|
242
247
|
}),
|
|
243
248
|
});
|
|
244
249
|
gaps.push(node);
|
|
@@ -24,6 +24,8 @@ export interface WebGapRepairOptions {
|
|
|
24
24
|
readonly searchService: GapRepairSearch;
|
|
25
25
|
readonly ingestService: GapRepairIngest;
|
|
26
26
|
readonly maxResults?: number;
|
|
27
|
+
readonly maxSearches?: number;
|
|
28
|
+
readonly maxSources?: number;
|
|
27
29
|
readonly minDistinctDomains?: number;
|
|
28
30
|
readonly minConfidence?: number;
|
|
29
31
|
readonly maxIngest?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gap-repair.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/gap-repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EACV,4BAA4B,EAG7B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"gap-repair.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/gap-repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EACV,4BAA4B,EAG7B,MAAM,YAAY,CAAC;AAIpB,UAAU,eAAe;IACvB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/D;AAED,UAAU,eAAe;IACvB,SAAS,CAAC,KAAK,EAAE;QACf,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;QAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC7C,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAyBD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,mBAAmB,GAAG,4BAA4B,CAExG"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { canonicalizeUri } from '../internal.js';
|
|
2
|
+
import { withTimeout } from './timeouts.js';
|
|
2
3
|
import { readString, scoreSemanticText, tokenizeSemanticQuery, uniqueStrings } from './utils.js';
|
|
3
4
|
export function createWebKnowledgeGapRepairer(options) {
|
|
4
5
|
return async (request) => repairKnowledgeGapsWithWeb(request, options);
|
|
5
6
|
}
|
|
6
7
|
async function repairKnowledgeGapsWithWeb(request, options) {
|
|
7
|
-
const
|
|
8
|
-
if (
|
|
8
|
+
const queries = buildGapRepairQueries(request);
|
|
9
|
+
if (queries.length === 0) {
|
|
9
10
|
return {
|
|
10
11
|
searched: false,
|
|
11
12
|
ingestedSourceIds: [],
|
|
@@ -13,46 +14,55 @@ async function repairKnowledgeGapsWithWeb(request, options) {
|
|
|
13
14
|
reason: 'No concrete subject was available for gap repair.',
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
17
|
+
const existing = existingSources(request);
|
|
18
|
+
const sourceLimit = Math.max(2, Math.min(5, request.maxSources ?? options.maxSources ?? options.maxIngest ?? 5));
|
|
19
|
+
const searchLimit = Math.max(1, Math.min(5, options.maxSearches ?? queries.length));
|
|
20
|
+
const searchResults = new Map();
|
|
21
|
+
const providerIds = new Set();
|
|
22
|
+
let lastError;
|
|
23
|
+
for (const query of queries.slice(0, searchLimit)) {
|
|
24
|
+
try {
|
|
25
|
+
const response = await withTimeout(options.searchService.search({
|
|
26
|
+
query,
|
|
27
|
+
maxResults: Math.max(sourceLimit, Math.min(8, options.maxResults ?? sourceLimit)),
|
|
28
|
+
verbosity: 'snippets',
|
|
29
|
+
safeSearch: 'moderate',
|
|
30
|
+
metadata: {
|
|
31
|
+
purpose: 'knowledge-gap-repair',
|
|
32
|
+
knowledgeSpaceId: request.spaceId,
|
|
33
|
+
},
|
|
34
|
+
}), Math.max(1_000, options.searchTimeoutMs ?? 8_000), 'Semantic gap repair search timed out.');
|
|
35
|
+
if (response.providerId)
|
|
36
|
+
providerIds.add(response.providerId);
|
|
37
|
+
for (const result of response.results) {
|
|
38
|
+
const canonical = canonicalizeUri(result.url);
|
|
39
|
+
if (!canonical || searchResults.has(canonical))
|
|
40
|
+
continue;
|
|
41
|
+
searchResults.set(canonical, { ...result, searchQuery: query, searchProviderId: response.providerId });
|
|
42
|
+
}
|
|
43
|
+
const partial = selectGapRepairCandidates([...searchResults.values()], existing, options, request, sourceLimit);
|
|
44
|
+
if (partial.length >= Math.max(2, options.minDistinctDomains ?? 2))
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
lastError = error instanceof Error ? error.message : String(error);
|
|
49
|
+
}
|
|
37
50
|
}
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
canonicalizeUri(source.sourceUri ?? ''),
|
|
41
|
-
].filter((value) => Boolean(value))));
|
|
42
|
-
const candidates = selectGapRepairCandidates(response.results, existing, options, query, request);
|
|
51
|
+
const allResults = [...searchResults.values()];
|
|
52
|
+
const candidates = selectGapRepairCandidates(allResults, existing, options, request, sourceLimit);
|
|
43
53
|
if (candidates.length < Math.max(2, options.minDistinctDomains ?? 2)) {
|
|
44
54
|
return {
|
|
45
55
|
searched: true,
|
|
46
|
-
query,
|
|
56
|
+
query: queries[0],
|
|
47
57
|
ingestedSourceIds: [],
|
|
48
|
-
skippedUrls:
|
|
49
|
-
sourceAssessments: buildSourceAssessments(
|
|
50
|
-
reason: 'Fewer than two distinct external sources were found for source-backed gap repair.',
|
|
58
|
+
skippedUrls: allResults.map((result) => result.url),
|
|
59
|
+
sourceAssessments: buildSourceAssessments(allResults, candidates, existing, options, request),
|
|
60
|
+
reason: lastError ?? 'Fewer than two distinct external sources were found for source-backed gap repair.',
|
|
51
61
|
};
|
|
52
62
|
}
|
|
53
63
|
const ingestedSourceIds = [];
|
|
54
64
|
const skippedUrls = [];
|
|
55
|
-
for (const result of candidates.slice(0, Math.max(2, Math.min(
|
|
65
|
+
for (const result of candidates.slice(0, Math.max(2, Math.min(sourceLimit, options.maxIngest ?? sourceLimit)))) {
|
|
56
66
|
try {
|
|
57
67
|
const ingested = await withTimeout(options.ingestService.ingestUrl({
|
|
58
68
|
url: result.url,
|
|
@@ -64,8 +74,9 @@ async function repairKnowledgeGapsWithWeb(request, options) {
|
|
|
64
74
|
knowledgeSpaceId: request.spaceId,
|
|
65
75
|
sourceDiscovery: {
|
|
66
76
|
purpose: 'semantic-gap-repair',
|
|
67
|
-
query,
|
|
68
|
-
|
|
77
|
+
query: result.searchQuery,
|
|
78
|
+
searchQueries: queries.slice(0, searchLimit),
|
|
79
|
+
providerId: result.searchProviderId ?? [...providerIds][0],
|
|
69
80
|
gapIds: request.gaps.map((gap) => gap.id),
|
|
70
81
|
gapQuestions: request.gaps.map((gap) => gap.title),
|
|
71
82
|
originalSourceIds: request.sources.map((source) => source.id),
|
|
@@ -76,6 +87,7 @@ async function repairKnowledgeGapsWithWeb(request, options) {
|
|
|
76
87
|
sourceDomain: result.domain ?? safeDomain(result.url),
|
|
77
88
|
trustReason: result.reasons.join(', '),
|
|
78
89
|
agreementSourceCount: candidates.length,
|
|
90
|
+
checkedSourceLimit: sourceLimit,
|
|
79
91
|
selectedUrl: result.url,
|
|
80
92
|
searchedAt: Date.now(),
|
|
81
93
|
},
|
|
@@ -92,27 +104,30 @@ async function repairKnowledgeGapsWithWeb(request, options) {
|
|
|
92
104
|
}
|
|
93
105
|
return {
|
|
94
106
|
searched: true,
|
|
95
|
-
query,
|
|
107
|
+
query: queries[0],
|
|
96
108
|
ingestedSourceIds,
|
|
97
109
|
skippedUrls,
|
|
98
|
-
sourceAssessments: buildSourceAssessments(
|
|
110
|
+
sourceAssessments: buildSourceAssessments(allResults, candidates, existing, options, request),
|
|
99
111
|
...(ingestedSourceIds.length < 2 ? { reason: 'Gap repair searched but fewer than two sources were ingested.' } : {}),
|
|
100
112
|
};
|
|
101
113
|
}
|
|
102
|
-
function
|
|
114
|
+
function buildGapRepairQueries(request) {
|
|
103
115
|
const subject = bestSubject(request);
|
|
104
116
|
if (!subject)
|
|
105
|
-
return
|
|
106
|
-
const gapTerms = uniqueStrings(request.gaps.flatMap((gap) => [
|
|
117
|
+
return [];
|
|
118
|
+
const gapTerms = clampSearchTerms(uniqueStrings(request.gaps.flatMap((gap) => [
|
|
107
119
|
gap.title,
|
|
108
120
|
gap.summary,
|
|
109
121
|
readString(gap.metadata.reason),
|
|
110
|
-
])).join(' ');
|
|
122
|
+
])).join(' '));
|
|
123
|
+
const profileTerms = inferGapProfileTerms(request);
|
|
111
124
|
return uniqueStrings([
|
|
112
|
-
subject,
|
|
113
|
-
|
|
114
|
-
'
|
|
115
|
-
|
|
125
|
+
[subject, gapTerms, 'official specifications'].filter(Boolean).join(' '),
|
|
126
|
+
[subject, profileTerms, 'product specifications'].filter(Boolean).join(' '),
|
|
127
|
+
[subject, profileTerms, 'features ports connectivity audio display'].filter(Boolean).join(' '),
|
|
128
|
+
[subject, 'manufacturer product page specifications'].join(' '),
|
|
129
|
+
[subject, 'datasheet manual specifications'].join(' '),
|
|
130
|
+
].map((query) => query.replace(/\s+/g, ' ').trim()).filter(Boolean));
|
|
116
131
|
}
|
|
117
132
|
function bestSubject(request) {
|
|
118
133
|
const linked = request.linkedObjects[0];
|
|
@@ -129,8 +144,39 @@ function bestSubject(request) {
|
|
|
129
144
|
source?.title,
|
|
130
145
|
]).join(' ') || null;
|
|
131
146
|
}
|
|
132
|
-
function
|
|
133
|
-
const
|
|
147
|
+
function inferGapProfileTerms(request) {
|
|
148
|
+
const text = request.gaps.map((gap) => `${gap.title} ${gap.summary ?? ''}`).join(' ').toLowerCase();
|
|
149
|
+
const terms = [];
|
|
150
|
+
if (/\b(port|ports|hdmi|usb|optical|rf|antenna|ethernet|rs-?232|composite|component|input|output|i\/o)\b/.test(text)) {
|
|
151
|
+
terms.push('ports inputs outputs connectivity');
|
|
152
|
+
}
|
|
153
|
+
if (/\b(bluetooth|wifi|wi-fi|wireless|network)\b/.test(text))
|
|
154
|
+
terms.push('wireless bluetooth wi-fi network');
|
|
155
|
+
if (/\b(refresh|hz|hdr|dolby|vision|gaming|vrr|allm|freesync)\b/.test(text))
|
|
156
|
+
terms.push('refresh rate hdr gaming vrr allm');
|
|
157
|
+
if (/\b(audio|speaker|sound|earc|arc)\b/.test(text))
|
|
158
|
+
terms.push('audio speakers earc arc');
|
|
159
|
+
if (/\b(display|screen|resolution|panel|lcd|oled|qled|nanocell)\b/.test(text))
|
|
160
|
+
terms.push('display resolution panel');
|
|
161
|
+
return uniqueStrings([
|
|
162
|
+
...terms,
|
|
163
|
+
...tokenizeSemanticQuery(text)
|
|
164
|
+
.filter((token) => token.length >= 3)
|
|
165
|
+
.filter((token) => !['what', 'does', 'have', 'which', 'with', 'from', 'that', 'this', 'current', 'source', 'text'].includes(token))
|
|
166
|
+
.slice(0, 12),
|
|
167
|
+
]).join(' ');
|
|
168
|
+
}
|
|
169
|
+
function clampSearchTerms(value) {
|
|
170
|
+
return tokenizeSemanticQuery(value).slice(0, 24).join(' ');
|
|
171
|
+
}
|
|
172
|
+
function existingSources(request) {
|
|
173
|
+
return new Set(request.sources.flatMap((source) => [
|
|
174
|
+
canonicalizeUri(source.canonicalUri ?? ''),
|
|
175
|
+
canonicalizeUri(source.sourceUri ?? ''),
|
|
176
|
+
].filter((value) => Boolean(value))));
|
|
177
|
+
}
|
|
178
|
+
function selectGapRepairCandidates(results, existingCanonicalUris, options, request, sourceLimit) {
|
|
179
|
+
const tokens = tokenizeSemanticQuery([bestSubject(request), inferGapProfileTerms(request)].filter(Boolean).join(' '));
|
|
134
180
|
const minimumConfidence = Math.max(1, Math.min(100, options.minConfidence ?? 70));
|
|
135
181
|
const byDomain = new Map();
|
|
136
182
|
for (const result of results) {
|
|
@@ -143,14 +189,14 @@ function selectGapRepairCandidates(results, existingCanonicalUris, options, quer
|
|
|
143
189
|
const domain = result.domain ?? safeDomain(result.url);
|
|
144
190
|
if (!domain || byDomain.has(domain))
|
|
145
191
|
continue;
|
|
146
|
-
const assessment = assessGapRepairSource(result,
|
|
192
|
+
const assessment = assessGapRepairSource(result, result.searchQuery, request);
|
|
147
193
|
if (assessment.confidence < minimumConfidence)
|
|
148
194
|
continue;
|
|
149
195
|
byDomain.set(domain, { ...result, confidence: assessment.confidence, reasons: assessment.reasons });
|
|
150
196
|
}
|
|
151
197
|
return [...byDomain.values()]
|
|
152
198
|
.sort((left, right) => right.confidence - left.confidence || left.rank - right.rank)
|
|
153
|
-
.slice(0,
|
|
199
|
+
.slice(0, sourceLimit);
|
|
154
200
|
}
|
|
155
201
|
function assessGapRepairSource(result, query, request) {
|
|
156
202
|
const searchable = [result.title, result.snippet, result.url, result.domain].filter(Boolean).join(' ').toLowerCase();
|
|
@@ -202,18 +248,19 @@ function assessGapRepairSource(result, query, request) {
|
|
|
202
248
|
...(result.title ? { title: result.title } : {}),
|
|
203
249
|
...(domain ? { domain } : {}),
|
|
204
250
|
rank: result.rank,
|
|
251
|
+
query: result.searchQuery,
|
|
205
252
|
confidence: Math.max(0, Math.min(100, score)),
|
|
206
253
|
reasons,
|
|
207
254
|
...(reasons.length > 0 ? { trustReason: reasons.join(', ') } : {}),
|
|
208
255
|
};
|
|
209
256
|
}
|
|
210
|
-
function buildSourceAssessments(results, candidates, existingCanonicalUris, options,
|
|
257
|
+
function buildSourceAssessments(results, candidates, existingCanonicalUris, options, request) {
|
|
211
258
|
const accepted = new Set(candidates.map((candidate) => canonicalizeUri(candidate.url)));
|
|
212
259
|
const acceptedDomains = new Set(candidates.map((candidate) => candidate.domain ?? safeDomain(candidate.url)).filter(Boolean));
|
|
213
260
|
const minimumConfidence = Math.max(1, Math.min(100, options.minConfidence ?? 70));
|
|
214
|
-
const tokens = tokenizeSemanticQuery(
|
|
261
|
+
const tokens = tokenizeSemanticQuery([bestSubject(request), inferGapProfileTerms(request)].filter(Boolean).join(' '));
|
|
215
262
|
return results.map((result) => {
|
|
216
|
-
const assessment = assessGapRepairSource(result,
|
|
263
|
+
const assessment = assessGapRepairSource(result, result.searchQuery, request);
|
|
217
264
|
const canonical = canonicalizeUri(result.url);
|
|
218
265
|
const domain = result.domain ?? safeDomain(result.url);
|
|
219
266
|
const isAccepted = Boolean(canonical && accepted.has(canonical));
|
|
@@ -282,19 +329,6 @@ function safeDomain(url) {
|
|
|
282
329
|
return undefined;
|
|
283
330
|
}
|
|
284
331
|
}
|
|
285
|
-
async function withTimeout(promise, timeoutMs, message) {
|
|
286
|
-
let timer;
|
|
287
|
-
const timeout = new Promise((_, reject) => {
|
|
288
|
-
timer = setTimeout(() => reject(new Error(message)), timeoutMs);
|
|
289
|
-
});
|
|
290
|
-
try {
|
|
291
|
-
return await Promise.race([promise, timeout]);
|
|
292
|
-
}
|
|
293
|
-
finally {
|
|
294
|
-
if (timer)
|
|
295
|
-
clearTimeout(timer);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
332
|
async function yieldToEventLoop() {
|
|
299
333
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
300
334
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-improvement.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/self-improvement.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"self-improvement.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/self-improvement.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAWpB,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxC;AAUD,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,kBAAkB,EAC3B,KAAK,GAAE,iCAAsC,GAC5C,OAAO,CAAC,kCAAkC,CAAC,CAsL7C"}
|
|
@@ -2,7 +2,8 @@ import { isGeneratedKnowledgeSource } from '../generated-projections.js';
|
|
|
2
2
|
import { yieldEvery, yieldToEventLoop } from '../cooperative.js';
|
|
3
3
|
import { getKnowledgeSpaceId, normalizeKnowledgeSpaceId } from '../spaces.js';
|
|
4
4
|
import { recoverNoRepairerTasks, recoverStaleActiveTasks } from './self-improvement-recovery.js';
|
|
5
|
-
import { readRecord, readString, semanticHash, semanticMetadata, semanticSlug, sourceKnowledgeSpace, uniqueStrings
|
|
5
|
+
import { readRecord, readString, semanticHash, semanticMetadata, semanticSlug, sourceKnowledgeSpace, uniqueStrings } from './utils.js';
|
|
6
|
+
import { withTimeout } from './timeouts.js';
|
|
6
7
|
const RETRY_DELAY_MS = 6 * 60 * 60 * 1000;
|
|
7
8
|
const DEFAULT_REFINEMENT_LIMIT = 12;
|
|
8
9
|
const MAX_REFINEMENT_LIMIT = 24;
|
|
@@ -114,14 +115,17 @@ export async function runKnowledgeSemanticSelfImprovement(context, input = {}) {
|
|
|
114
115
|
context.activeGapRepairs.add(repairKey);
|
|
115
116
|
try {
|
|
116
117
|
task = await updateRefinementTask(context.store, task, 'searching', 'Searching for source-backed repair evidence.', { query: gap.title });
|
|
117
|
-
const
|
|
118
|
+
const remainingMs = Math.max(1_000, startedAt + maxRunMs - Date.now());
|
|
119
|
+
const result = await withTimeout(context.gapRepairer({
|
|
118
120
|
spaceId,
|
|
119
121
|
query: gap.title,
|
|
120
122
|
gaps: [gap],
|
|
121
123
|
sources: gapContext.sources,
|
|
122
124
|
linkedObjects: gapContext.linkedObjects,
|
|
123
125
|
facts: gapContext.facts,
|
|
124
|
-
|
|
126
|
+
maxSources: 5,
|
|
127
|
+
deadlineAt: Date.now() + remainingMs,
|
|
128
|
+
}), remainingMs, 'Semantic gap repair exceeded its run budget.');
|
|
125
129
|
if (result?.searched)
|
|
126
130
|
searched += 1;
|
|
127
131
|
ingestedSources += result?.ingestedSourceIds.length ?? 0;
|
|
@@ -398,8 +402,8 @@ async function upsertRefinementTaskForGap(store, spaceId, context, trigger, stat
|
|
|
398
402
|
trigger,
|
|
399
403
|
priority: refinementPriority(context.gap),
|
|
400
404
|
budget: {
|
|
401
|
-
maxSearches:
|
|
402
|
-
maxSources:
|
|
405
|
+
maxSearches: 5,
|
|
406
|
+
maxSources: 5,
|
|
403
407
|
maxLlmCalls: 1,
|
|
404
408
|
},
|
|
405
409
|
attemptCount,
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T>;
|
|
2
|
+
export declare function withTimeoutOrNull<T>(promise: Promise<T>, timeoutMs: number): Promise<T | null>;
|
|
3
|
+
export declare function clampTimeoutMs(value: number | undefined, fallbackMs: number, minMs: number, maxMs: number): number;
|
|
4
|
+
//# sourceMappingURL=timeouts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeouts.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/timeouts.ts"],"names":[],"mappings":"AAAA,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAUZ;AAED,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAMnB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,MAAM,CAGR"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export async function withTimeout(promise, timeoutMs, message) {
|
|
2
|
+
let timer;
|
|
3
|
+
const timeout = new Promise((_, reject) => {
|
|
4
|
+
timer = setTimeout(() => reject(new Error(message)), Math.max(1, timeoutMs));
|
|
5
|
+
});
|
|
6
|
+
try {
|
|
7
|
+
return await Promise.race([promise, timeout]);
|
|
8
|
+
}
|
|
9
|
+
finally {
|
|
10
|
+
if (timer)
|
|
11
|
+
clearTimeout(timer);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export async function withTimeoutOrNull(promise, timeoutMs) {
|
|
15
|
+
try {
|
|
16
|
+
return await withTimeout(promise, timeoutMs, 'operation timed out');
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function clampTimeoutMs(value, fallbackMs, minMs, maxMs) {
|
|
23
|
+
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
24
|
+
return fallbackMs;
|
|
25
|
+
return Math.max(minMs, Math.min(maxMs, Math.trunc(value)));
|
|
26
|
+
}
|
|
@@ -85,6 +85,7 @@ export interface KnowledgeSemanticAnswerInput {
|
|
|
85
85
|
readonly linkedObjects?: readonly KnowledgeNodeRecord[];
|
|
86
86
|
readonly noMatchMessage?: string;
|
|
87
87
|
readonly autoRepairGaps?: boolean;
|
|
88
|
+
readonly timeoutMs?: number;
|
|
88
89
|
}
|
|
89
90
|
export interface KnowledgeSemanticAnswer {
|
|
90
91
|
readonly text: string;
|
|
@@ -118,6 +119,9 @@ export interface KnowledgeSemanticGapRepairRequest {
|
|
|
118
119
|
readonly sources: readonly KnowledgeSourceRecord[];
|
|
119
120
|
readonly linkedObjects: readonly KnowledgeNodeRecord[];
|
|
120
121
|
readonly facts: readonly KnowledgeNodeRecord[];
|
|
122
|
+
readonly maxSources?: number;
|
|
123
|
+
readonly deadlineAt?: number;
|
|
124
|
+
readonly signal?: AbortSignal;
|
|
121
125
|
}
|
|
122
126
|
export interface KnowledgeSemanticGapRepairResult {
|
|
123
127
|
readonly searched: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
let version = '0.28.
|
|
3
|
+
let version = '0.28.13';
|
|
4
4
|
try {
|
|
5
5
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
|
|
6
6
|
version = pkg.version ?? version;
|