@promptbook/pdf 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/pdf",
3
- "version": "0.92.0-15",
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/pdf.index.d.ts",
53
53
  "peerDependencies": {
54
- "@promptbook/core": "0.92.0-15"
54
+ "@promptbook/core": "0.92.0-16"
55
55
  },
56
56
  "dependencies": {
57
57
  "crypto": "1.0.1",
package/umd/index.umd.js CHANGED
@@ -25,7 +25,7 @@
25
25
  * @generated
26
26
  * @see https://github.com/webgptorg/promptbook
27
27
  */
28
- const PROMPTBOOK_ENGINE_VERSION = '0.92.0-15';
28
+ const PROMPTBOOK_ENGINE_VERSION = '0.92.0-16';
29
29
  /**
30
30
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
31
31
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -4561,10 +4561,12 @@
4561
4561
  throw new PipelineExecutionError('Parameter is already opened or not closed');
4562
4562
  }
4563
4563
  if (parameters[parameterName] === undefined) {
4564
+ console.log('!!! templateParameters 1', { parameterName, template, parameters });
4564
4565
  throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
4565
4566
  }
4566
4567
  let parameterValue = parameters[parameterName];
4567
4568
  if (parameterValue === undefined) {
4569
+ console.log('!!! templateParameters 2', { parameterName, template, parameters });
4568
4570
  throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
4569
4571
  }
4570
4572
  parameterValue = valueToString(parameterValue);
@@ -5220,6 +5222,23 @@
5220
5222
  return 1 - dotProduct / (magnitude1 * magnitude2);
5221
5223
  }
5222
5224
 
5225
+ /**
5226
+ *
5227
+ * @param knowledgePieces
5228
+ * @returns
5229
+ *
5230
+ * @private internal utility of `createPipelineExecutor`
5231
+ */
5232
+ function knowledgePiecesToString(knowledgePieces) {
5233
+ return knowledgePieces
5234
+ .map((knowledgePiece) => {
5235
+ const { content } = knowledgePiece;
5236
+ return `- ${content}`;
5237
+ })
5238
+ .join('\n');
5239
+ // <- TODO: [🧠] Some smarter aggregation of knowledge pieces, single-line vs multi-line vs mixed
5240
+ }
5241
+
5223
5242
  /**
5224
5243
  * @@@
5225
5244
  *
@@ -5233,53 +5252,60 @@
5233
5252
  const firstKnowlegeIndex = firstKnowlegePiece === null || firstKnowlegePiece === void 0 ? void 0 : firstKnowlegePiece.index[0];
5234
5253
  // <- TODO: Do not use just first knowledge piece and first index to determine embedding model, use also keyword search
5235
5254
  if (firstKnowlegePiece === undefined || firstKnowlegeIndex === undefined) {
5236
- return 'No knowledge pieces found';
5255
+ return ''; // <- Note: Np knowledge present, return empty string
5237
5256
  }
5238
- // TODO: [🚐] Make arrayable LLMs -> single LLM DRY
5239
- const _llms = arrayableToArray(tools.llm);
5240
- const llmTools = _llms.length === 1 ? _llms[0] : joinLlmExecutionTools(..._llms);
5241
- const taskEmbeddingPrompt = {
5242
- title: 'Knowledge Search',
5243
- modelRequirements: {
5244
- modelVariant: 'EMBEDDING',
5245
- modelName: firstKnowlegeIndex.modelName,
5246
- },
5247
- content: task.content,
5248
- parameters: {
5249
- /* !!!! */
5250
- },
5251
- };
5252
- const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
5253
- const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
5254
- const { index } = knowledgePiece;
5255
- const knowledgePieceIndex = index.find((i) => i.modelName === firstKnowlegeIndex.modelName);
5256
- // <- TODO: Do not use just first knowledge piece and first index to determine embedding model
5257
- if (knowledgePieceIndex === undefined) {
5257
+ try {
5258
+ // TODO: [🚐] Make arrayable LLMs -> single LLM DRY
5259
+ const _llms = arrayableToArray(tools.llm);
5260
+ const llmTools = _llms.length === 1 ? _llms[0] : joinLlmExecutionTools(..._llms);
5261
+ const taskEmbeddingPrompt = {
5262
+ title: 'Knowledge Search',
5263
+ modelRequirements: {
5264
+ modelVariant: 'EMBEDDING',
5265
+ modelName: firstKnowlegeIndex.modelName,
5266
+ },
5267
+ content: task.content,
5268
+ parameters: {
5269
+ /* !!!! */
5270
+ },
5271
+ };
5272
+ const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
5273
+ const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
5274
+ const { index } = knowledgePiece;
5275
+ const knowledgePieceIndex = index.find((i) => i.modelName === firstKnowlegeIndex.modelName);
5276
+ // <- TODO: Do not use just first knowledge piece and first index to determine embedding model
5277
+ if (knowledgePieceIndex === undefined) {
5278
+ return {
5279
+ content: knowledgePiece.content,
5280
+ relevance: 0,
5281
+ };
5282
+ }
5283
+ const relevance = computeCosineSimilarity(knowledgePieceIndex.position, taskEmbeddingResult.content);
5258
5284
  return {
5259
5285
  content: knowledgePiece.content,
5260
- relevance: 0,
5286
+ relevance,
5261
5287
  };
5262
- }
5263
- const relevance = computeCosineSimilarity(knowledgePieceIndex.position, taskEmbeddingResult.content);
5264
- return {
5265
- content: knowledgePiece.content,
5266
- relevance,
5267
- };
5268
- });
5269
- const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
5270
- const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
5271
- console.log('!!! Embedding', {
5272
- task,
5273
- taskEmbeddingPrompt,
5274
- taskEmbeddingResult,
5275
- firstKnowlegePiece,
5276
- firstKnowlegeIndex,
5277
- knowledgePiecesWithRelevance,
5278
- knowledgePiecesSorted,
5279
- knowledgePiecesLimited,
5280
- });
5281
- return knowledgePiecesLimited.map(({ content }) => `- ${content}`).join('\n');
5282
- // <- TODO: [🧠] Some smart aggregation of knowledge pieces, single-line vs multi-line vs mixed
5288
+ });
5289
+ const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
5290
+ const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
5291
+ console.log('!!! Embedding', {
5292
+ task,
5293
+ taskEmbeddingPrompt,
5294
+ taskEmbeddingResult,
5295
+ firstKnowlegePiece,
5296
+ firstKnowlegeIndex,
5297
+ knowledgePiecesWithRelevance,
5298
+ knowledgePiecesSorted,
5299
+ knowledgePiecesLimited,
5300
+ });
5301
+ return knowledgePiecesToString(knowledgePiecesLimited);
5302
+ }
5303
+ catch (error) {
5304
+ assertsError(error);
5305
+ console.error('Error in `getKnowledgeForTask`', error);
5306
+ // Note: If the LLM fails, just return all knowledge pieces
5307
+ return knowledgePiecesToString(preparedPipeline.knowledgePieces);
5308
+ }
5283
5309
  }
5284
5310
  /**
5285
5311
  * TODO: !!!! Verify if this is working