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