fawn-memory 0.0.3
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/README.md +118 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +183 -0
- package/dist/index.js.map +1 -0
- package/dist/knowpro/answerContextSchema.d.ts +20 -0
- package/dist/knowpro/answerContextSchema.d.ts.map +1 -0
- package/dist/knowpro/answerContextSchema.js +4 -0
- package/dist/knowpro/answerContextSchema.js.map +1 -0
- package/dist/knowpro/answerResponseSchema.d.ts +7 -0
- package/dist/knowpro/answerResponseSchema.d.ts.map +1 -0
- package/dist/knowpro/answerResponseSchema.js +4 -0
- package/dist/knowpro/answerResponseSchema.js.map +1 -0
- package/dist/knowpro/answerTranslator.d.ts +5 -0
- package/dist/knowpro/answerTranslator.d.ts.map +1 -0
- package/dist/knowpro/answerTranslator.js +10 -0
- package/dist/knowpro/answerTranslator.js.map +1 -0
- package/dist/knowpro/collections.d.ts +14 -0
- package/dist/knowpro/collections.d.ts.map +1 -0
- package/dist/knowpro/collections.js +52 -0
- package/dist/knowpro/collections.js.map +1 -0
- package/dist/knowpro/conversation.d.ts +63 -0
- package/dist/knowpro/conversation.d.ts.map +1 -0
- package/dist/knowpro/conversation.js +247 -0
- package/dist/knowpro/conversation.js.map +1 -0
- package/dist/knowpro/dateTimeSchema.d.ts +19 -0
- package/dist/knowpro/dateTimeSchema.d.ts.map +1 -0
- package/dist/knowpro/dateTimeSchema.js +4 -0
- package/dist/knowpro/dateTimeSchema.js.map +1 -0
- package/dist/knowpro/entities.d.ts +9 -0
- package/dist/knowpro/entities.d.ts.map +1 -0
- package/dist/knowpro/entities.js +63 -0
- package/dist/knowpro/entities.js.map +1 -0
- package/dist/knowpro/interfaces.d.ts +637 -0
- package/dist/knowpro/interfaces.d.ts.map +1 -0
- package/dist/knowpro/interfaces.js +4 -0
- package/dist/knowpro/interfaces.js.map +1 -0
- package/dist/knowpro/knowledge.d.ts +19 -0
- package/dist/knowpro/knowledge.d.ts.map +1 -0
- package/dist/knowpro/knowledge.js +97 -0
- package/dist/knowpro/knowledge.js.map +1 -0
- package/dist/knowpro/knowledgeSchema.d.ts +39 -0
- package/dist/knowpro/knowledgeSchema.d.ts.map +1 -0
- package/dist/knowpro/knowledgeSchema.js +2 -0
- package/dist/knowpro/knowledgeSchema.js.map +1 -0
- package/dist/knowpro/llmProvider.d.ts +17 -0
- package/dist/knowpro/llmProvider.d.ts.map +1 -0
- package/dist/knowpro/llmProvider.js +105 -0
- package/dist/knowpro/llmProvider.js.map +1 -0
- package/dist/knowpro/relatedTermsSchema.d.ts +24 -0
- package/dist/knowpro/relatedTermsSchema.d.ts.map +1 -0
- package/dist/knowpro/relatedTermsSchema.js +6 -0
- package/dist/knowpro/relatedTermsSchema.js.map +1 -0
- package/dist/knowpro/schema.d.ts +24 -0
- package/dist/knowpro/schema.d.ts.map +1 -0
- package/dist/knowpro/schema.js +55 -0
- package/dist/knowpro/schema.js.map +1 -0
- package/dist/knowpro/search.d.ts +8 -0
- package/dist/knowpro/search.d.ts.map +1 -0
- package/dist/knowpro/search.js +448 -0
- package/dist/knowpro/search.js.map +1 -0
- package/dist/knowpro/searchQuerySchema.d.ts +40 -0
- package/dist/knowpro/searchQuerySchema.d.ts.map +1 -0
- package/dist/knowpro/searchQuerySchema.js +4 -0
- package/dist/knowpro/searchQuerySchema.js.map +1 -0
- package/dist/knowpro/searchQueryTranslator.d.ts +33 -0
- package/dist/knowpro/searchQueryTranslator.d.ts.map +1 -0
- package/dist/knowpro/searchQueryTranslator.js +47 -0
- package/dist/knowpro/searchQueryTranslator.js.map +1 -0
- package/dist/knowpro/semanticRef.d.ts +4 -0
- package/dist/knowpro/semanticRef.d.ts.map +1 -0
- package/dist/knowpro/semanticRef.js +62 -0
- package/dist/knowpro/semanticRef.js.map +1 -0
- package/dist/knowpro/semanticRefIndex.d.ts +48 -0
- package/dist/knowpro/semanticRefIndex.d.ts.map +1 -0
- package/dist/knowpro/semanticRefIndex.js +388 -0
- package/dist/knowpro/semanticRefIndex.js.map +1 -0
- package/dist/knowpro/storageProvider.d.ts +7 -0
- package/dist/knowpro/storageProvider.d.ts.map +1 -0
- package/dist/knowpro/storageProvider.js +61 -0
- package/dist/knowpro/storageProvider.js.map +1 -0
- package/dist/knowpro/timestampIndex.d.ts +43 -0
- package/dist/knowpro/timestampIndex.d.ts.map +1 -0
- package/dist/knowpro/timestampIndex.js +324 -0
- package/dist/knowpro/timestampIndex.js.map +1 -0
- package/dist/rag/chunking.d.ts +6 -0
- package/dist/rag/chunking.d.ts.map +1 -0
- package/dist/rag/chunking.js +83 -0
- package/dist/rag/chunking.js.map +1 -0
- package/dist/rag/embeddingProvider.d.ts +34 -0
- package/dist/rag/embeddingProvider.d.ts.map +1 -0
- package/dist/rag/embeddingProvider.js +95 -0
- package/dist/rag/embeddingProvider.js.map +1 -0
- package/dist/rag/index.d.ts +8 -0
- package/dist/rag/index.d.ts.map +1 -0
- package/dist/rag/index.js +7 -0
- package/dist/rag/index.js.map +1 -0
- package/dist/rag/knowproAdapter.d.ts +44 -0
- package/dist/rag/knowproAdapter.d.ts.map +1 -0
- package/dist/rag/knowproAdapter.js +66 -0
- package/dist/rag/knowproAdapter.js.map +1 -0
- package/dist/rag/ragIndex.d.ts +101 -0
- package/dist/rag/ragIndex.d.ts.map +1 -0
- package/dist/rag/ragIndex.js +305 -0
- package/dist/rag/ragIndex.js.map +1 -0
- package/dist/rag/similarity.d.ts +15 -0
- package/dist/rag/similarity.d.ts.map +1 -0
- package/dist/rag/similarity.js +47 -0
- package/dist/rag/similarity.js.map +1 -0
- package/dist/rag/types.d.ts +61 -0
- package/dist/rag/types.d.ts.map +1 -0
- package/dist/rag/types.js +2 -0
- package/dist/rag/types.js.map +1 -0
- package/dist/rag/vectorIndex.d.ts +102 -0
- package/dist/rag/vectorIndex.d.ts.map +1 -0
- package/dist/rag/vectorIndex.js +236 -0
- package/dist/rag/vectorIndex.js.map +1 -0
- package/dist/utils/async.d.ts +25 -0
- package/dist/utils/async.d.ts.map +1 -0
- package/dist/utils/async.js +55 -0
- package/dist/utils/async.js.map +1 -0
- package/dist/utils/string.d.ts +3 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +15 -0
- package/dist/utils/string.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export function populateSemanticRef(semanticRefs, knowledgeResponse, baseSemanticRefOrdinal, messageOrdinal) {
|
|
2
|
+
let semanticRefOrdinalModifier = baseSemanticRefOrdinal;
|
|
3
|
+
// create semantic refs from the extracted knowledge here
|
|
4
|
+
try {
|
|
5
|
+
knowledgeResponse.entities.forEach((entity) => {
|
|
6
|
+
const newSemanticRef = {
|
|
7
|
+
semanticRefOrdinal: semanticRefOrdinalModifier,
|
|
8
|
+
knowledgeType: "entity",
|
|
9
|
+
range: {
|
|
10
|
+
start: {
|
|
11
|
+
messageOrdinal
|
|
12
|
+
},
|
|
13
|
+
end: {
|
|
14
|
+
messageOrdinal
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
knowledge: entity
|
|
18
|
+
};
|
|
19
|
+
semanticRefs.append(newSemanticRef);
|
|
20
|
+
semanticRefOrdinalModifier += 1;
|
|
21
|
+
});
|
|
22
|
+
knowledgeResponse.actions.forEach((action) => {
|
|
23
|
+
const newSemanticRef = {
|
|
24
|
+
semanticRefOrdinal: semanticRefOrdinalModifier,
|
|
25
|
+
knowledgeType: "action",
|
|
26
|
+
knowledge: action,
|
|
27
|
+
range: {
|
|
28
|
+
start: {
|
|
29
|
+
messageOrdinal
|
|
30
|
+
},
|
|
31
|
+
end: {
|
|
32
|
+
messageOrdinal
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
semanticRefs.append(newSemanticRef);
|
|
37
|
+
semanticRefOrdinalModifier += 1;
|
|
38
|
+
});
|
|
39
|
+
knowledgeResponse.topics.forEach((topic) => {
|
|
40
|
+
const newSemanticRef = {
|
|
41
|
+
semanticRefOrdinal: semanticRefOrdinalModifier,
|
|
42
|
+
knowledgeType: "topic",
|
|
43
|
+
knowledge: { text: topic },
|
|
44
|
+
range: {
|
|
45
|
+
start: {
|
|
46
|
+
messageOrdinal
|
|
47
|
+
},
|
|
48
|
+
end: {
|
|
49
|
+
messageOrdinal
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
semanticRefs.append(newSemanticRef);
|
|
54
|
+
semanticRefOrdinalModifier += 1;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.log(error);
|
|
59
|
+
}
|
|
60
|
+
return semanticRefs;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=semanticRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semanticRef.js","sourceRoot":"","sources":["../../src/knowpro/semanticRef.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,mBAAmB,CAC/B,YAAoC,EACpC,iBAAoC,EACpC,sBAA8B,EAC9B,cAAsB;IAEtB,IAAI,0BAA0B,GAAG,sBAAsB,CAAC;IACxD,yDAAyD;IACzD,IAAI,CAAC;QAED,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1C,MAAM,cAAc,GAAgB;gBAChC,kBAAkB,EAAE,0BAA0B;gBAC9C,aAAa,EAAE,QAAQ;gBACvB,KAAK,EAAE;oBACH,KAAK,EAAE;wBACH,cAAc;qBACjB;oBACD,GAAG,EAAE;wBACD,cAAc;qBACjB;iBACJ;gBACD,SAAS,EAAE,MAAM;aACpB,CAAA;YACD,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACpC,0BAA0B,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACzC,MAAM,cAAc,GAAgB;gBAChC,kBAAkB,EAAE,0BAA0B;gBAC9C,aAAa,EAAE,QAAQ;gBACvB,SAAS,EAAE,MAAM;gBACjB,KAAK,EAAE;oBACH,KAAK,EAAE;wBACH,cAAc;qBACjB;oBACD,GAAG,EAAE;wBACD,cAAc;qBACjB;iBACJ;aACJ,CAAA;YACD,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACpC,0BAA0B,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvC,MAAM,cAAc,GAAgB;gBAChC,kBAAkB,EAAE,0BAA0B;gBAC9C,aAAa,EAAE,OAAO;gBACtB,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;gBAC1B,KAAK,EAAE;oBACH,KAAK,EAAE;wBACH,cAAc;qBACjB;oBACD,GAAG,EAAE;wBACD,cAAc;qBACjB;iBACJ;aACJ,CAAA;YACD,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACpC,0BAA0B,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IAEP,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ISemanticRefCollection, ITermToSemanticRefIndex, ScoredSemanticRefOrdinal, SemanticRefOrdinal, Topic } from "./interfaces.js";
|
|
2
|
+
import type { Action, ConcreteEntity, Facet } from "./knowledgeSchema.js";
|
|
3
|
+
import type { TypeChatLanguageModel } from "typechat";
|
|
4
|
+
export interface RelatedTermsExpansionOptions {
|
|
5
|
+
/** Weight for related terms (0-1, default 0.9) */
|
|
6
|
+
relatedTermWeight?: number;
|
|
7
|
+
/** Batch size as percentage of total terms (0-1, default 0.1 = 10%) */
|
|
8
|
+
batchSizePercent?: number;
|
|
9
|
+
/** Maximum terms per batch (default 50) */
|
|
10
|
+
maxBatchSize?: number;
|
|
11
|
+
/** Minimum terms per batch (default 5) */
|
|
12
|
+
minBatchSize?: number;
|
|
13
|
+
/** Maximum total terms to process (default: all eligible terms) */
|
|
14
|
+
maxTerms?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface RelatedTermsExpansionResult {
|
|
17
|
+
termsProcessed: number;
|
|
18
|
+
relatedTermsAdded: number;
|
|
19
|
+
/** Map of original term -> related terms added */
|
|
20
|
+
expansionMap: Map<string, string[]>;
|
|
21
|
+
}
|
|
22
|
+
export interface WordNetExpansionOptions {
|
|
23
|
+
/** Weight for related terms (0-1, default 0.9) */
|
|
24
|
+
relatedTermWeight?: number;
|
|
25
|
+
/** Maximum total terms to process (default: all eligible terms) */
|
|
26
|
+
maxTerms?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface InMemorySemanticRefIndex extends ITermToSemanticRefIndex {
|
|
29
|
+
addEntity: (entity: ConcreteEntity, refOrdinal: SemanticRefOrdinal) => void;
|
|
30
|
+
addFacet: (facet: Facet, refOrdinal: SemanticRefOrdinal) => void;
|
|
31
|
+
addAction: (action: Action, refOrdinal: SemanticRefOrdinal) => void;
|
|
32
|
+
addTopic: (topic: Topic, refOrdinal: SemanticRefOrdinal) => void;
|
|
33
|
+
buildIndex: (semanticRefCollection: ISemanticRefCollection) => void;
|
|
34
|
+
lemmatizeIndex: () => LemmatizationResult;
|
|
35
|
+
expandWithRelatedTerms: (model: TypeChatLanguageModel, options?: RelatedTermsExpansionOptions) => Promise<RelatedTermsExpansionResult>;
|
|
36
|
+
expandWithWordNet: (options?: WordNetExpansionOptions) => Promise<RelatedTermsExpansionResult>;
|
|
37
|
+
loadFromExport: (items: Array<{
|
|
38
|
+
term: string;
|
|
39
|
+
semanticRefOrdinals: ScoredSemanticRefOrdinal[];
|
|
40
|
+
}>) => void;
|
|
41
|
+
}
|
|
42
|
+
export interface LemmatizationResult {
|
|
43
|
+
termsProcessed: number;
|
|
44
|
+
lemmasAdded: number;
|
|
45
|
+
lemmaMap: Map<string, string>;
|
|
46
|
+
}
|
|
47
|
+
export declare function createInMemorySemanticRefIndex(): InMemorySemanticRefIndex;
|
|
48
|
+
//# sourceMappingURL=semanticRefIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semanticRefIndex.d.ts","sourceRoot":"","sources":["../../src/knowpro/semanticRefIndex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,wBAAwB,EAAe,kBAAkB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACzJ,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAOtD,MAAM,WAAW,4BAA4B;IACzC,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,2BAA2B;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACpC,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IACrE,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5E,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACpE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjE,UAAU,EAAE,CAAC,qBAAqB,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACpE,cAAc,EAAE,MAAM,mBAAmB,CAAC;IAC1C,sBAAsB,EAAE,CAAC,KAAK,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,4BAA4B,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACvI,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC/F,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,wBAAwB,EAAE,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;CAC7G;AAED,MAAM,WAAW,mBAAmB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,wBAAgB,8BAA8B,IAAI,wBAAwB,CA6czE"}
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import lemmatizer from "wink-lemmatizer";
|
|
2
|
+
import { createJsonTranslator } from "typechat";
|
|
3
|
+
import { createTypeScriptJsonValidator } from "typechat/ts";
|
|
4
|
+
import { loadSchema } from "./schema.js";
|
|
5
|
+
import natural from "natural";
|
|
6
|
+
export function createInMemorySemanticRefIndex() {
|
|
7
|
+
const map = new Map();
|
|
8
|
+
return {
|
|
9
|
+
getTerms,
|
|
10
|
+
addTerm,
|
|
11
|
+
removeTerm,
|
|
12
|
+
lookupTerm,
|
|
13
|
+
addEntity,
|
|
14
|
+
addFacet,
|
|
15
|
+
addAction,
|
|
16
|
+
addTopic,
|
|
17
|
+
buildIndex,
|
|
18
|
+
lemmatizeIndex,
|
|
19
|
+
expandWithRelatedTerms,
|
|
20
|
+
expandWithWordNet,
|
|
21
|
+
loadFromExport
|
|
22
|
+
};
|
|
23
|
+
// what is a term?
|
|
24
|
+
// - entity name
|
|
25
|
+
// - every type in entity
|
|
26
|
+
// - every facet in entity
|
|
27
|
+
// - every topic
|
|
28
|
+
// - every action verbs joined
|
|
29
|
+
// - action subject entity name
|
|
30
|
+
// - action object entity name
|
|
31
|
+
// - action inderect object entity name
|
|
32
|
+
// - action params
|
|
33
|
+
function getTerms() {
|
|
34
|
+
return [...map.keys()];
|
|
35
|
+
}
|
|
36
|
+
function lookupTerm(term) {
|
|
37
|
+
return map.get(term);
|
|
38
|
+
}
|
|
39
|
+
function removeTerm(term) {
|
|
40
|
+
map.delete(term);
|
|
41
|
+
}
|
|
42
|
+
function addTerm(term, semanticRefOrdinal) {
|
|
43
|
+
if (!term) {
|
|
44
|
+
return term;
|
|
45
|
+
}
|
|
46
|
+
term = term.toLowerCase();
|
|
47
|
+
const existing = map.get(term);
|
|
48
|
+
// Handle both SemanticRefOrdinal (number) and ScoredSemanticRefOrdinal (object with score)
|
|
49
|
+
let scoredOrdinal;
|
|
50
|
+
if (typeof semanticRefOrdinal === 'number') {
|
|
51
|
+
scoredOrdinal = {
|
|
52
|
+
semanticRefOrdinal,
|
|
53
|
+
score: 1.0
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
scoredOrdinal = semanticRefOrdinal;
|
|
58
|
+
}
|
|
59
|
+
if (!existing) {
|
|
60
|
+
map.set(term, [scoredOrdinal]);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
map.set(term, [...existing, scoredOrdinal]);
|
|
64
|
+
}
|
|
65
|
+
return term;
|
|
66
|
+
}
|
|
67
|
+
function addEntity(entity, refOrdinal) {
|
|
68
|
+
// console.log("ADDING ENTITY", entity)
|
|
69
|
+
if (!entity.type) {
|
|
70
|
+
// TODO this is a hack we need to add some sort of validation
|
|
71
|
+
// to the fine tuning output so we don't get malformed objects
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
addTerm(entity.name, refOrdinal);
|
|
75
|
+
entity.type.forEach((subType) => {
|
|
76
|
+
addTerm(subType, refOrdinal);
|
|
77
|
+
});
|
|
78
|
+
if (entity.facets) {
|
|
79
|
+
entity.facets.forEach(facet => {
|
|
80
|
+
addFacet(facet, refOrdinal);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function addFacet(facet, refOrdinal) {
|
|
85
|
+
addTerm(facet.name, refOrdinal);
|
|
86
|
+
if (facet.value) {
|
|
87
|
+
addTerm(facet.value.toString(), refOrdinal);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function addAction(action, refOrdinal) {
|
|
91
|
+
// console.log("ADDING ACTION", action)
|
|
92
|
+
const actionTerm = action.verbs.join(" ");
|
|
93
|
+
addTerm(actionTerm, refOrdinal);
|
|
94
|
+
addTerm(action.objectEntityName, refOrdinal);
|
|
95
|
+
addTerm(action.indirectObjectEntityName, refOrdinal);
|
|
96
|
+
addTerm(action.subjectEntityName, refOrdinal);
|
|
97
|
+
if (action.params) {
|
|
98
|
+
action.params.forEach((param) => {
|
|
99
|
+
if (typeof (param) === "string") {
|
|
100
|
+
addTerm(param, refOrdinal);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
addTerm(param.name, refOrdinal);
|
|
104
|
+
// same here this is a crutch for malformed llm output
|
|
105
|
+
if (param.value) {
|
|
106
|
+
addTerm(param.value.toString(), refOrdinal);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function addTopic(topic, refOrdinal) {
|
|
113
|
+
addTerm(topic.text, refOrdinal);
|
|
114
|
+
}
|
|
115
|
+
function buildIndex(semanticRefs) {
|
|
116
|
+
semanticRefs.getAll().forEach((ref) => {
|
|
117
|
+
switch (ref.knowledgeType) {
|
|
118
|
+
case "entity": {
|
|
119
|
+
addEntity(ref.knowledge, ref.semanticRefOrdinal);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case "action": {
|
|
123
|
+
addAction(ref.knowledge, ref.semanticRefOrdinal);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case "topic": {
|
|
127
|
+
addTopic(ref.knowledge, ref.semanticRefOrdinal);
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
default: {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function loadFromExport(items) {
|
|
137
|
+
// Clear existing index
|
|
138
|
+
map.clear();
|
|
139
|
+
// Load all terms with their scored ordinals
|
|
140
|
+
for (const item of items) {
|
|
141
|
+
map.set(item.term.toLowerCase(), item.semanticRefOrdinals);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function lemmatizeIndex() {
|
|
145
|
+
const terms = getTerms();
|
|
146
|
+
const lemmaMap = new Map();
|
|
147
|
+
let lemmasAdded = 0;
|
|
148
|
+
for (const term of terms) {
|
|
149
|
+
// Skip very short terms or terms with spaces (phrases)
|
|
150
|
+
if (term.length < 3 || term.includes(" ")) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
// Get the semantic refs for this term
|
|
154
|
+
const refs = map.get(term);
|
|
155
|
+
if (!refs || refs.length === 0) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
// Try lemmatizing as different parts of speech
|
|
159
|
+
const nounLemma = lemmatizer.noun(term);
|
|
160
|
+
const verbLemma = lemmatizer.verb(term);
|
|
161
|
+
const adjLemma = lemmatizer.adjective(term);
|
|
162
|
+
// Collect unique lemmas that differ from the original
|
|
163
|
+
const lemmas = new Set();
|
|
164
|
+
if (nounLemma !== term)
|
|
165
|
+
lemmas.add(nounLemma);
|
|
166
|
+
if (verbLemma !== term)
|
|
167
|
+
lemmas.add(verbLemma);
|
|
168
|
+
if (adjLemma !== term)
|
|
169
|
+
lemmas.add(adjLemma);
|
|
170
|
+
// Add each lemma to the index pointing to the same refs
|
|
171
|
+
for (const lemma of lemmas) {
|
|
172
|
+
// Skip if lemma is already in the index with the same refs
|
|
173
|
+
const existingRefs = map.get(lemma);
|
|
174
|
+
if (!existingRefs) {
|
|
175
|
+
// New lemma - add all refs
|
|
176
|
+
map.set(lemma, [...refs]);
|
|
177
|
+
lemmasAdded++;
|
|
178
|
+
lemmaMap.set(term, lemma);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// Lemma exists - merge refs (avoid duplicates)
|
|
182
|
+
const existingOrdinals = new Set(existingRefs.map(r => r.semanticRefOrdinal));
|
|
183
|
+
const newRefs = refs.filter(r => !existingOrdinals.has(r.semanticRefOrdinal));
|
|
184
|
+
if (newRefs.length > 0) {
|
|
185
|
+
map.set(lemma, [...existingRefs, ...newRefs]);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
termsProcessed: terms.length,
|
|
192
|
+
lemmasAdded,
|
|
193
|
+
lemmaMap
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
async function expandWithRelatedTerms(model, options) {
|
|
197
|
+
const { relatedTermWeight = 0.9, batchSizePercent = 0.1, maxBatchSize = 50, minBatchSize = 5, maxTerms } = options ?? {};
|
|
198
|
+
const terms = getTerms();
|
|
199
|
+
const expansionMap = new Map();
|
|
200
|
+
let relatedTermsAdded = 0;
|
|
201
|
+
// Filter terms: skip very short terms, phrases, and common stop words
|
|
202
|
+
const stopWords = new Set(['the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could', 'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'dare', 'ought', 'used', 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'between', 'under', 'again', 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'each', 'few', 'more', 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just', 'and', 'but', 'if', 'or', 'because', 'until', 'while', 'this', 'that', 'these', 'those', 'it', 'its']);
|
|
203
|
+
let eligibleTerms = terms.filter(term => term.length >= 3 &&
|
|
204
|
+
!term.includes(' ') &&
|
|
205
|
+
!stopWords.has(term));
|
|
206
|
+
// Limit total terms if maxTerms is specified
|
|
207
|
+
if (maxTerms !== undefined && maxTerms < eligibleTerms.length) {
|
|
208
|
+
eligibleTerms = eligibleTerms.slice(0, maxTerms);
|
|
209
|
+
}
|
|
210
|
+
if (eligibleTerms.length === 0) {
|
|
211
|
+
return { termsProcessed: 0, relatedTermsAdded: 0, expansionMap };
|
|
212
|
+
}
|
|
213
|
+
// Calculate batch size
|
|
214
|
+
const calculatedBatchSize = Math.floor(eligibleTerms.length * batchSizePercent);
|
|
215
|
+
const batchSize = Math.max(minBatchSize, Math.min(maxBatchSize, calculatedBatchSize));
|
|
216
|
+
// Create translator for related terms
|
|
217
|
+
const schema = loadSchema(["relatedTermsSchema.ts"], import.meta.url);
|
|
218
|
+
const validator = createTypeScriptJsonValidator(schema, "RelatedTermsResponse");
|
|
219
|
+
const translator = createJsonTranslator(model, validator);
|
|
220
|
+
translator.createRequestPrompt = (request) => {
|
|
221
|
+
return (`You are a service that finds semantically related words for search index expansion.\n` +
|
|
222
|
+
`Given a list of terms, return synonyms and semantically related words for each.\n\n` +
|
|
223
|
+
`IMPORTANT RULES:\n` +
|
|
224
|
+
`- Do NOT include morphological variants (plurals, verb tenses, etc.) - only semantically different words\n` +
|
|
225
|
+
`- Focus on words that users might use interchangeably when searching\n` +
|
|
226
|
+
`- Include synonyms, near-synonyms, and closely related concepts\n` +
|
|
227
|
+
`- Keep related terms to 2-5 per term (quality over quantity)\n` +
|
|
228
|
+
`- Skip proper nouns (names of people, places, brands)\n\n` +
|
|
229
|
+
`Examples:\n` +
|
|
230
|
+
`- book -> [novel, publication, text, volume]\n` +
|
|
231
|
+
`- buy -> [purchase, acquire, obtain]\n` +
|
|
232
|
+
`- happy -> [joyful, pleased, glad, content]\n` +
|
|
233
|
+
`- psychology -> [mental health, counseling, therapy]\n\n` +
|
|
234
|
+
`The following TypeScript definitions describe the expected response format:\n` +
|
|
235
|
+
`\`\`\`\n${schema}\`\`\`\n` +
|
|
236
|
+
`Input terms:\n${request}\n\n` +
|
|
237
|
+
`Return a JSON object of type RelatedTermsResponse with related terms for each input term:\n`);
|
|
238
|
+
};
|
|
239
|
+
// Process in batches
|
|
240
|
+
for (let i = 0; i < eligibleTerms.length; i += batchSize) {
|
|
241
|
+
const batch = eligibleTerms.slice(i, i + batchSize);
|
|
242
|
+
console.log(`Expanding terms batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(eligibleTerms.length / batchSize)} (${batch.length} terms)`);
|
|
243
|
+
try {
|
|
244
|
+
const request = batch.join(', ');
|
|
245
|
+
const result = await translator.translate(request);
|
|
246
|
+
if (!result.success) {
|
|
247
|
+
console.warn(`Failed to expand batch: ${result.message}`);
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
// Process the response
|
|
251
|
+
for (const termWithRelated of result.data.terms) {
|
|
252
|
+
const originalTerm = termWithRelated.term.toLowerCase();
|
|
253
|
+
const refs = map.get(originalTerm);
|
|
254
|
+
if (!refs || refs.length === 0) {
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
const addedRelated = [];
|
|
258
|
+
for (const relatedTerm of termWithRelated.relatedTerms) {
|
|
259
|
+
const normalizedRelated = relatedTerm.toLowerCase();
|
|
260
|
+
// Skip if it's the same as the original
|
|
261
|
+
if (normalizedRelated === originalTerm) {
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
// Add the related term pointing to the same refs with lower weight
|
|
265
|
+
for (const ref of refs) {
|
|
266
|
+
const weightedRef = {
|
|
267
|
+
semanticRefOrdinal: ref.semanticRefOrdinal,
|
|
268
|
+
score: ref.score * relatedTermWeight
|
|
269
|
+
};
|
|
270
|
+
// Check if this term already exists with this ref
|
|
271
|
+
const existingRefs = map.get(normalizedRelated);
|
|
272
|
+
if (existingRefs) {
|
|
273
|
+
const alreadyHasRef = existingRefs.some(r => r.semanticRefOrdinal === ref.semanticRefOrdinal);
|
|
274
|
+
if (!alreadyHasRef) {
|
|
275
|
+
map.set(normalizedRelated, [...existingRefs, weightedRef]);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
map.set(normalizedRelated, [weightedRef]);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
addedRelated.push(normalizedRelated);
|
|
283
|
+
relatedTermsAdded++;
|
|
284
|
+
}
|
|
285
|
+
if (addedRelated.length > 0) {
|
|
286
|
+
expansionMap.set(originalTerm, addedRelated);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
console.error(`Error expanding batch:`, error);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return {
|
|
295
|
+
termsProcessed: eligibleTerms.length,
|
|
296
|
+
relatedTermsAdded,
|
|
297
|
+
expansionMap
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
async function expandWithWordNet(options) {
|
|
301
|
+
const { relatedTermWeight = 0.9, maxTerms } = options ?? {};
|
|
302
|
+
const wordnet = new natural.WordNet();
|
|
303
|
+
const terms = getTerms();
|
|
304
|
+
const expansionMap = new Map();
|
|
305
|
+
let relatedTermsAdded = 0;
|
|
306
|
+
// Filter terms: skip very short terms, phrases, and common stop words
|
|
307
|
+
const stopWords = new Set(['the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could', 'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'dare', 'ought', 'used', 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'between', 'under', 'again', 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'each', 'few', 'more', 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just', 'and', 'but', 'if', 'or', 'because', 'until', 'while', 'this', 'that', 'these', 'those', 'it', 'its']);
|
|
308
|
+
let eligibleTerms = terms.filter(term => term.length >= 3 &&
|
|
309
|
+
!term.includes(' ') &&
|
|
310
|
+
!stopWords.has(term));
|
|
311
|
+
// Limit total terms if maxTerms is specified
|
|
312
|
+
if (maxTerms !== undefined && maxTerms < eligibleTerms.length) {
|
|
313
|
+
eligibleTerms = eligibleTerms.slice(0, maxTerms);
|
|
314
|
+
}
|
|
315
|
+
if (eligibleTerms.length === 0) {
|
|
316
|
+
return { termsProcessed: 0, relatedTermsAdded: 0, expansionMap };
|
|
317
|
+
}
|
|
318
|
+
// Helper to get synonyms from WordNet (promisified)
|
|
319
|
+
const getSynonyms = (word) => {
|
|
320
|
+
return new Promise((resolve) => {
|
|
321
|
+
const synonyms = new Set();
|
|
322
|
+
wordnet.lookup(word, (results) => {
|
|
323
|
+
if (results && results.length > 0) {
|
|
324
|
+
for (const result of results) {
|
|
325
|
+
// Add synonyms from the synset
|
|
326
|
+
if (result.synonyms) {
|
|
327
|
+
for (const syn of result.synonyms) {
|
|
328
|
+
const normalized = syn.toLowerCase().replace(/_/g, ' ');
|
|
329
|
+
// Skip multi-word phrases and the original word
|
|
330
|
+
if (!normalized.includes(' ') && normalized !== word) {
|
|
331
|
+
synonyms.add(normalized);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
resolve([...synonyms].slice(0, 5)); // Limit to 5 synonyms per term
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
};
|
|
341
|
+
console.log(`Expanding ${eligibleTerms.length} terms using WordNet...`);
|
|
342
|
+
let processed = 0;
|
|
343
|
+
for (const term of eligibleTerms) {
|
|
344
|
+
const refs = map.get(term);
|
|
345
|
+
if (!refs || refs.length === 0) {
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
const synonyms = await getSynonyms(term);
|
|
349
|
+
const addedRelated = [];
|
|
350
|
+
for (const synonym of synonyms) {
|
|
351
|
+
// Add the related term pointing to the same refs with lower weight
|
|
352
|
+
for (const ref of refs) {
|
|
353
|
+
const weightedRef = {
|
|
354
|
+
semanticRefOrdinal: ref.semanticRefOrdinal,
|
|
355
|
+
score: ref.score * relatedTermWeight
|
|
356
|
+
};
|
|
357
|
+
// Check if this term already exists with this ref
|
|
358
|
+
const existingRefs = map.get(synonym);
|
|
359
|
+
if (existingRefs) {
|
|
360
|
+
const alreadyHasRef = existingRefs.some(r => r.semanticRefOrdinal === ref.semanticRefOrdinal);
|
|
361
|
+
if (!alreadyHasRef) {
|
|
362
|
+
map.set(synonym, [...existingRefs, weightedRef]);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
map.set(synonym, [weightedRef]);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
addedRelated.push(synonym);
|
|
370
|
+
relatedTermsAdded++;
|
|
371
|
+
}
|
|
372
|
+
if (addedRelated.length > 0) {
|
|
373
|
+
expansionMap.set(term, addedRelated);
|
|
374
|
+
}
|
|
375
|
+
processed++;
|
|
376
|
+
if (processed % 100 === 0) {
|
|
377
|
+
console.log(` Processed ${processed}/${eligibleTerms.length} terms...`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
console.log(`WordNet expansion complete: ${relatedTermsAdded} related terms added`);
|
|
381
|
+
return {
|
|
382
|
+
termsProcessed: eligibleTerms.length,
|
|
383
|
+
relatedTermsAdded,
|
|
384
|
+
expansionMap
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=semanticRefIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semanticRefIndex.js","sourceRoot":"","sources":["../../src/knowpro/semanticRefIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IMessageCollection, ISemanticRefCollection, IStorageProvider } from "./interfaces.js";
|
|
2
|
+
import { type Message } from "./conversation.js";
|
|
3
|
+
export interface InMemoryStorageProvider extends IStorageProvider {
|
|
4
|
+
loadFromFile: (filePath: string, semanticRefs: ISemanticRefCollection, messages: IMessageCollection<Message>) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function createInMemoryStorageProvider(): InMemoryStorageProvider;
|
|
7
|
+
//# sourceMappingURL=storageProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageProvider.d.ts","sourceRoot":"","sources":["../../src/knowpro/storageProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGpG,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGhE,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC7D,YAAY,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,sBAAsB,EACpC,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,KACpC,IAAI,CAAC;CACb;AAID,wBAAgB,6BAA6B,IAAI,uBAAuB,CAuEvE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createMessageCollection, createSemanticRefCollection } from "./collections.js";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { createMessage } from "./conversation.js";
|
|
4
|
+
import { populateSemanticRef } from "./semanticRef.js";
|
|
5
|
+
const SEPERATOR = "================================================================================";
|
|
6
|
+
export function createInMemoryStorageProvider() {
|
|
7
|
+
function loadFromFile(filePath, semanticRefs, messages) {
|
|
8
|
+
const knowledgeFile = readFileSync(filePath, "utf-8");
|
|
9
|
+
const sections = knowledgeFile.split(SEPERATOR);
|
|
10
|
+
let lossCount = 0;
|
|
11
|
+
sections.forEach((section) => {
|
|
12
|
+
// if (semanticRefOrdinal != semanticRefs.length) {
|
|
13
|
+
// console.log("ERROR", semanticRefOrdinal, semanticRefs.length);
|
|
14
|
+
// throw Error("HELP SOMETHING WENT WRONG THESE MUST BE THE SAME LENGTH");
|
|
15
|
+
// }
|
|
16
|
+
const jsonStart = section.indexOf("{");
|
|
17
|
+
// Get and add message
|
|
18
|
+
const content = section.substring(0, jsonStart);
|
|
19
|
+
const message = createMessage(content, []);
|
|
20
|
+
// filter our the empty chunks
|
|
21
|
+
if (content.length < 10) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// 1. merge entities and actions
|
|
25
|
+
// 2. make a token limit
|
|
26
|
+
// 3. decide how to preseent merged e & a
|
|
27
|
+
// into the answer propmt densely
|
|
28
|
+
// what did julia do in the forest?
|
|
29
|
+
// how did julia meet winston?
|
|
30
|
+
// what color is julia's sash?
|
|
31
|
+
// what is the book winston gets from obrien about?
|
|
32
|
+
// what is the uniform of the inner party?
|
|
33
|
+
// Get knowledge and add semantic refs
|
|
34
|
+
const jsonString = section.substring(jsonStart).split("\n")[0];
|
|
35
|
+
try {
|
|
36
|
+
const knowledgeResponse = JSON.parse(jsonString);
|
|
37
|
+
if (knowledgeResponse) {
|
|
38
|
+
semanticRefs = populateSemanticRef(semanticRefs, knowledgeResponse, semanticRefs.length, messages.length);
|
|
39
|
+
// semanticRefOrdinal += ordinalModifier;
|
|
40
|
+
messages.append(message);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
lossCount += 1;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
console.log("LOSS COUNT: ", lossCount, lossCount / sections.length, sections.length);
|
|
48
|
+
console.log(messages.length, semanticRefs.length);
|
|
49
|
+
}
|
|
50
|
+
function close() {
|
|
51
|
+
console.log("Closing storage provider.");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
createMessageCollection,
|
|
56
|
+
createSemanticRefCollection,
|
|
57
|
+
loadFromFile,
|
|
58
|
+
close
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=storageProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageProvider.js","sourceRoot":"","sources":["../../src/knowpro/storageProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAUvD,MAAM,SAAS,GAAG,kFAAkF,CAAC;AAErG,MAAM,UAAU,6BAA6B;IAEzC,SAAS,YAAY,CACjB,QAAgB,EAChB,YAAoC,EACpC,QAAqC;QAErC,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACzB,mDAAmD;YACnD,qEAAqE;YACrE,8EAA8E;YAC9E,IAAI;YACJ,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEvC,sBAAsB;YACtB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAE3C,8BAA8B;YAC9B,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACtB,OAAO;YACX,CAAC;YAED,gCAAgC;YAChC,wBAAwB;YACxB,yCAAyC;YACzC,oCAAoC;YAEpC,mCAAmC;YACnC,8BAA8B;YAC9B,8BAA8B;YAC9B,mDAAmD;YACnD,0CAA0C;YAE1C,sCAAsC;YACtC,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC;gBACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACjD,IAAI,iBAAiB,EAAE,CAAC;oBACpB,YAAY,GAAG,mBAAmB,CAC9B,YAAY,EACZ,iBAAiB,EACjB,YAAY,CAAC,MAAM,EACnB,QAAQ,CAAC,MAAM,CAClB,CAAC;oBACF,yCAAyC;oBACzC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,SAAS,IAAI,CAAC,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;IACrD,CAAC;IAED,SAAS,KAAK;QACV,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO;IACX,CAAC;IAED,OAAO;QACH,uBAAuB;QACvB,2BAA2B;QAC3B,YAAY;QACZ,KAAK;KACR,CAAA;AACL,CAAC"}
|