@promptbook/documents 0.92.0-15 → 0.92.0-16
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.
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { KnowledgePiecePreparedJson } from '../../pipeline/PipelineJson/KnowledgePieceJson';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @param knowledgePieces
|
|
5
|
+
* @returns
|
|
6
|
+
*
|
|
7
|
+
* @private internal utility of `createPipelineExecutor`
|
|
8
|
+
*/
|
|
9
|
+
export declare function knowledgePiecesToString(knowledgePieces: ReadonlyArray<Pick<KnowledgePiecePreparedJson, 'content'>>): string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@promptbook/documents",
|
|
3
|
-
"version": "0.92.0-
|
|
3
|
+
"version": "0.92.0-16",
|
|
4
4
|
"description": "It's time for a paradigm shift. The future of software in plain English, French or Latin",
|
|
5
5
|
"private": false,
|
|
6
6
|
"sideEffects": false,
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"module": "./esm/index.es.js",
|
|
52
52
|
"typings": "./esm/typings/src/_packages/documents.index.d.ts",
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@promptbook/core": "0.92.0-
|
|
54
|
+
"@promptbook/core": "0.92.0-16"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"colors": "1.4.0",
|
package/umd/index.umd.js
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* @generated
|
|
27
27
|
* @see https://github.com/webgptorg/promptbook
|
|
28
28
|
*/
|
|
29
|
-
const PROMPTBOOK_ENGINE_VERSION = '0.92.0-
|
|
29
|
+
const PROMPTBOOK_ENGINE_VERSION = '0.92.0-16';
|
|
30
30
|
/**
|
|
31
31
|
* TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
|
|
32
32
|
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
@@ -4711,10 +4711,12 @@
|
|
|
4711
4711
|
throw new PipelineExecutionError('Parameter is already opened or not closed');
|
|
4712
4712
|
}
|
|
4713
4713
|
if (parameters[parameterName] === undefined) {
|
|
4714
|
+
console.log('!!! templateParameters 1', { parameterName, template, parameters });
|
|
4714
4715
|
throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
|
|
4715
4716
|
}
|
|
4716
4717
|
let parameterValue = parameters[parameterName];
|
|
4717
4718
|
if (parameterValue === undefined) {
|
|
4719
|
+
console.log('!!! templateParameters 2', { parameterName, template, parameters });
|
|
4718
4720
|
throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
|
|
4719
4721
|
}
|
|
4720
4722
|
parameterValue = valueToString(parameterValue);
|
|
@@ -5370,6 +5372,23 @@
|
|
|
5370
5372
|
return 1 - dotProduct / (magnitude1 * magnitude2);
|
|
5371
5373
|
}
|
|
5372
5374
|
|
|
5375
|
+
/**
|
|
5376
|
+
*
|
|
5377
|
+
* @param knowledgePieces
|
|
5378
|
+
* @returns
|
|
5379
|
+
*
|
|
5380
|
+
* @private internal utility of `createPipelineExecutor`
|
|
5381
|
+
*/
|
|
5382
|
+
function knowledgePiecesToString(knowledgePieces) {
|
|
5383
|
+
return knowledgePieces
|
|
5384
|
+
.map((knowledgePiece) => {
|
|
5385
|
+
const { content } = knowledgePiece;
|
|
5386
|
+
return `- ${content}`;
|
|
5387
|
+
})
|
|
5388
|
+
.join('\n');
|
|
5389
|
+
// <- TODO: [🧠] Some smarter aggregation of knowledge pieces, single-line vs multi-line vs mixed
|
|
5390
|
+
}
|
|
5391
|
+
|
|
5373
5392
|
/**
|
|
5374
5393
|
* @@@
|
|
5375
5394
|
*
|
|
@@ -5383,53 +5402,60 @@
|
|
|
5383
5402
|
const firstKnowlegeIndex = firstKnowlegePiece === null || firstKnowlegePiece === void 0 ? void 0 : firstKnowlegePiece.index[0];
|
|
5384
5403
|
// <- TODO: Do not use just first knowledge piece and first index to determine embedding model, use also keyword search
|
|
5385
5404
|
if (firstKnowlegePiece === undefined || firstKnowlegeIndex === undefined) {
|
|
5386
|
-
return '
|
|
5405
|
+
return ''; // <- Note: Np knowledge present, return empty string
|
|
5387
5406
|
}
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
const
|
|
5405
|
-
|
|
5406
|
-
|
|
5407
|
-
|
|
5407
|
+
try {
|
|
5408
|
+
// TODO: [🚐] Make arrayable LLMs -> single LLM DRY
|
|
5409
|
+
const _llms = arrayableToArray(tools.llm);
|
|
5410
|
+
const llmTools = _llms.length === 1 ? _llms[0] : joinLlmExecutionTools(..._llms);
|
|
5411
|
+
const taskEmbeddingPrompt = {
|
|
5412
|
+
title: 'Knowledge Search',
|
|
5413
|
+
modelRequirements: {
|
|
5414
|
+
modelVariant: 'EMBEDDING',
|
|
5415
|
+
modelName: firstKnowlegeIndex.modelName,
|
|
5416
|
+
},
|
|
5417
|
+
content: task.content,
|
|
5418
|
+
parameters: {
|
|
5419
|
+
/* !!!! */
|
|
5420
|
+
},
|
|
5421
|
+
};
|
|
5422
|
+
const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
|
|
5423
|
+
const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
|
|
5424
|
+
const { index } = knowledgePiece;
|
|
5425
|
+
const knowledgePieceIndex = index.find((i) => i.modelName === firstKnowlegeIndex.modelName);
|
|
5426
|
+
// <- TODO: Do not use just first knowledge piece and first index to determine embedding model
|
|
5427
|
+
if (knowledgePieceIndex === undefined) {
|
|
5428
|
+
return {
|
|
5429
|
+
content: knowledgePiece.content,
|
|
5430
|
+
relevance: 0,
|
|
5431
|
+
};
|
|
5432
|
+
}
|
|
5433
|
+
const relevance = computeCosineSimilarity(knowledgePieceIndex.position, taskEmbeddingResult.content);
|
|
5408
5434
|
return {
|
|
5409
5435
|
content: knowledgePiece.content,
|
|
5410
|
-
relevance
|
|
5436
|
+
relevance,
|
|
5411
5437
|
};
|
|
5412
|
-
}
|
|
5413
|
-
const
|
|
5414
|
-
|
|
5415
|
-
|
|
5416
|
-
|
|
5417
|
-
|
|
5418
|
-
|
|
5419
|
-
|
|
5420
|
-
|
|
5421
|
-
|
|
5422
|
-
|
|
5423
|
-
|
|
5424
|
-
|
|
5425
|
-
|
|
5426
|
-
|
|
5427
|
-
|
|
5428
|
-
|
|
5429
|
-
|
|
5430
|
-
|
|
5431
|
-
|
|
5432
|
-
|
|
5438
|
+
});
|
|
5439
|
+
const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
|
|
5440
|
+
const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
|
|
5441
|
+
console.log('!!! Embedding', {
|
|
5442
|
+
task,
|
|
5443
|
+
taskEmbeddingPrompt,
|
|
5444
|
+
taskEmbeddingResult,
|
|
5445
|
+
firstKnowlegePiece,
|
|
5446
|
+
firstKnowlegeIndex,
|
|
5447
|
+
knowledgePiecesWithRelevance,
|
|
5448
|
+
knowledgePiecesSorted,
|
|
5449
|
+
knowledgePiecesLimited,
|
|
5450
|
+
});
|
|
5451
|
+
return knowledgePiecesToString(knowledgePiecesLimited);
|
|
5452
|
+
}
|
|
5453
|
+
catch (error) {
|
|
5454
|
+
assertsError(error);
|
|
5455
|
+
console.error('Error in `getKnowledgeForTask`', error);
|
|
5456
|
+
// Note: If the LLM fails, just return all knowledge pieces
|
|
5457
|
+
return knowledgePiecesToString(preparedPipeline.knowledgePieces);
|
|
5458
|
+
}
|
|
5433
5459
|
}
|
|
5434
5460
|
/**
|
|
5435
5461
|
* TODO: !!!! Verify if this is working
|