@promptbook/node 0.92.0-14 → 0.92.0-17
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/node",
|
|
3
|
-
"version": "0.92.0-
|
|
3
|
+
"version": "0.92.0-17",
|
|
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/node.index.d.ts",
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@promptbook/core": "0.92.0-
|
|
54
|
+
"@promptbook/core": "0.92.0-17"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"colors": "1.4.0",
|
package/umd/index.umd.js
CHANGED
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
* @generated
|
|
47
47
|
* @see https://github.com/webgptorg/promptbook
|
|
48
48
|
*/
|
|
49
|
-
const PROMPTBOOK_ENGINE_VERSION = '0.92.0-
|
|
49
|
+
const PROMPTBOOK_ENGINE_VERSION = '0.92.0-17';
|
|
50
50
|
/**
|
|
51
51
|
* TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
|
|
52
52
|
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
@@ -3240,10 +3240,12 @@
|
|
|
3240
3240
|
throw new PipelineExecutionError('Parameter is already opened or not closed');
|
|
3241
3241
|
}
|
|
3242
3242
|
if (parameters[parameterName] === undefined) {
|
|
3243
|
+
console.log('!!! templateParameters 1', { parameterName, template, parameters });
|
|
3243
3244
|
throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
|
|
3244
3245
|
}
|
|
3245
3246
|
let parameterValue = parameters[parameterName];
|
|
3246
3247
|
if (parameterValue === undefined) {
|
|
3248
|
+
console.log('!!! templateParameters 2', { parameterName, template, parameters });
|
|
3247
3249
|
throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
|
|
3248
3250
|
}
|
|
3249
3251
|
parameterValue = valueToString(parameterValue);
|
|
@@ -4160,6 +4162,23 @@
|
|
|
4160
4162
|
return 1 - dotProduct / (magnitude1 * magnitude2);
|
|
4161
4163
|
}
|
|
4162
4164
|
|
|
4165
|
+
/**
|
|
4166
|
+
*
|
|
4167
|
+
* @param knowledgePieces
|
|
4168
|
+
* @returns
|
|
4169
|
+
*
|
|
4170
|
+
* @private internal utility of `createPipelineExecutor`
|
|
4171
|
+
*/
|
|
4172
|
+
function knowledgePiecesToString(knowledgePieces) {
|
|
4173
|
+
return knowledgePieces
|
|
4174
|
+
.map((knowledgePiece) => {
|
|
4175
|
+
const { content } = knowledgePiece;
|
|
4176
|
+
return `- ${content}`;
|
|
4177
|
+
})
|
|
4178
|
+
.join('\n');
|
|
4179
|
+
// <- TODO: [🧠] Some smarter aggregation of knowledge pieces, single-line vs multi-line vs mixed
|
|
4180
|
+
}
|
|
4181
|
+
|
|
4163
4182
|
/**
|
|
4164
4183
|
* @@@
|
|
4165
4184
|
*
|
|
@@ -4173,53 +4192,60 @@
|
|
|
4173
4192
|
const firstKnowlegeIndex = firstKnowlegePiece === null || firstKnowlegePiece === void 0 ? void 0 : firstKnowlegePiece.index[0];
|
|
4174
4193
|
// <- TODO: Do not use just first knowledge piece and first index to determine embedding model, use also keyword search
|
|
4175
4194
|
if (firstKnowlegePiece === undefined || firstKnowlegeIndex === undefined) {
|
|
4176
|
-
return '
|
|
4195
|
+
return ''; // <- Note: Np knowledge present, return empty string
|
|
4177
4196
|
}
|
|
4178
|
-
|
|
4179
|
-
|
|
4180
|
-
|
|
4181
|
-
|
|
4182
|
-
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4191
|
-
|
|
4192
|
-
|
|
4193
|
-
|
|
4194
|
-
const
|
|
4195
|
-
|
|
4196
|
-
|
|
4197
|
-
|
|
4197
|
+
try {
|
|
4198
|
+
// TODO: [🚐] Make arrayable LLMs -> single LLM DRY
|
|
4199
|
+
const _llms = arrayableToArray(tools.llm);
|
|
4200
|
+
const llmTools = _llms.length === 1 ? _llms[0] : joinLlmExecutionTools(..._llms);
|
|
4201
|
+
const taskEmbeddingPrompt = {
|
|
4202
|
+
title: 'Knowledge Search',
|
|
4203
|
+
modelRequirements: {
|
|
4204
|
+
modelVariant: 'EMBEDDING',
|
|
4205
|
+
modelName: firstKnowlegeIndex.modelName,
|
|
4206
|
+
},
|
|
4207
|
+
content: task.content,
|
|
4208
|
+
parameters: {
|
|
4209
|
+
/* !!!! */
|
|
4210
|
+
},
|
|
4211
|
+
};
|
|
4212
|
+
const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
|
|
4213
|
+
const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
|
|
4214
|
+
const { index } = knowledgePiece;
|
|
4215
|
+
const knowledgePieceIndex = index.find((i) => i.modelName === firstKnowlegeIndex.modelName);
|
|
4216
|
+
// <- TODO: Do not use just first knowledge piece and first index to determine embedding model
|
|
4217
|
+
if (knowledgePieceIndex === undefined) {
|
|
4218
|
+
return {
|
|
4219
|
+
content: knowledgePiece.content,
|
|
4220
|
+
relevance: 0,
|
|
4221
|
+
};
|
|
4222
|
+
}
|
|
4223
|
+
const relevance = computeCosineSimilarity(knowledgePieceIndex.position, taskEmbeddingResult.content);
|
|
4198
4224
|
return {
|
|
4199
4225
|
content: knowledgePiece.content,
|
|
4200
|
-
relevance
|
|
4226
|
+
relevance,
|
|
4201
4227
|
};
|
|
4202
|
-
}
|
|
4203
|
-
const
|
|
4204
|
-
|
|
4205
|
-
|
|
4206
|
-
|
|
4207
|
-
|
|
4208
|
-
|
|
4209
|
-
|
|
4210
|
-
|
|
4211
|
-
|
|
4212
|
-
|
|
4213
|
-
|
|
4214
|
-
|
|
4215
|
-
|
|
4216
|
-
|
|
4217
|
-
|
|
4218
|
-
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4222
|
-
|
|
4228
|
+
});
|
|
4229
|
+
const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
|
|
4230
|
+
const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
|
|
4231
|
+
console.log('!!! Embedding', {
|
|
4232
|
+
task,
|
|
4233
|
+
taskEmbeddingPrompt,
|
|
4234
|
+
taskEmbeddingResult,
|
|
4235
|
+
firstKnowlegePiece,
|
|
4236
|
+
firstKnowlegeIndex,
|
|
4237
|
+
knowledgePiecesWithRelevance,
|
|
4238
|
+
knowledgePiecesSorted,
|
|
4239
|
+
knowledgePiecesLimited,
|
|
4240
|
+
});
|
|
4241
|
+
return knowledgePiecesToString(knowledgePiecesLimited);
|
|
4242
|
+
}
|
|
4243
|
+
catch (error) {
|
|
4244
|
+
assertsError(error);
|
|
4245
|
+
console.error('Error in `getKnowledgeForTask`', error);
|
|
4246
|
+
// Note: If the LLM fails, just return all knowledge pieces
|
|
4247
|
+
return knowledgePiecesToString(preparedPipeline.knowledgePieces);
|
|
4248
|
+
}
|
|
4223
4249
|
}
|
|
4224
4250
|
/**
|
|
4225
4251
|
* TODO: !!!! Verify if this is working
|