@promptbook/markitdown 0.92.0-14 → 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
@@ -26,7 +26,7 @@ const BOOK_LANGUAGE_VERSION = '1.0.0';
26
26
  * @generated
27
27
  * @see https://github.com/webgptorg/promptbook
28
28
  */
29
- const PROMPTBOOK_ENGINE_VERSION = '0.92.0-14';
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
@@ -4549,10 +4549,12 @@ function templateParameters(template, parameters) {
4549
4549
  throw new PipelineExecutionError('Parameter is already opened or not closed');
4550
4550
  }
4551
4551
  if (parameters[parameterName] === undefined) {
4552
+ console.log('!!! templateParameters 1', { parameterName, template, parameters });
4552
4553
  throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
4553
4554
  }
4554
4555
  let parameterValue = parameters[parameterName];
4555
4556
  if (parameterValue === undefined) {
4557
+ console.log('!!! templateParameters 2', { parameterName, template, parameters });
4556
4558
  throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
4557
4559
  }
4558
4560
  parameterValue = valueToString(parameterValue);
@@ -5208,6 +5210,23 @@ function computeCosineSimilarity(embeddingVector1, embeddingVector2) {
5208
5210
  return 1 - dotProduct / (magnitude1 * magnitude2);
5209
5211
  }
5210
5212
 
5213
+ /**
5214
+ *
5215
+ * @param knowledgePieces
5216
+ * @returns
5217
+ *
5218
+ * @private internal utility of `createPipelineExecutor`
5219
+ */
5220
+ function knowledgePiecesToString(knowledgePieces) {
5221
+ return knowledgePieces
5222
+ .map((knowledgePiece) => {
5223
+ const { content } = knowledgePiece;
5224
+ return `- ${content}`;
5225
+ })
5226
+ .join('\n');
5227
+ // <- TODO: [🧠] Some smarter aggregation of knowledge pieces, single-line vs multi-line vs mixed
5228
+ }
5229
+
5211
5230
  /**
5212
5231
  * @@@
5213
5232
  *
@@ -5221,53 +5240,60 @@ async function getKnowledgeForTask(options) {
5221
5240
  const firstKnowlegeIndex = firstKnowlegePiece === null || firstKnowlegePiece === void 0 ? void 0 : firstKnowlegePiece.index[0];
5222
5241
  // <- TODO: Do not use just first knowledge piece and first index to determine embedding model, use also keyword search
5223
5242
  if (firstKnowlegePiece === undefined || firstKnowlegeIndex === undefined) {
5224
- return 'No knowledge pieces found';
5243
+ return ''; // <- Note: Np knowledge present, return empty string
5225
5244
  }
5226
- // TODO: [🚐] Make arrayable LLMs -> single LLM DRY
5227
- const _llms = arrayableToArray(tools.llm);
5228
- const llmTools = _llms.length === 1 ? _llms[0] : joinLlmExecutionTools(..._llms);
5229
- const taskEmbeddingPrompt = {
5230
- title: 'Knowledge Search',
5231
- modelRequirements: {
5232
- modelVariant: 'EMBEDDING',
5233
- modelName: firstKnowlegeIndex.modelName,
5234
- },
5235
- content: task.content,
5236
- parameters: {
5237
- /* !!!! */
5238
- },
5239
- };
5240
- const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
5241
- const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
5242
- const { index } = knowledgePiece;
5243
- const knowledgePieceIndex = index.find((i) => i.modelName === firstKnowlegeIndex.modelName);
5244
- // <- TODO: Do not use just first knowledge piece and first index to determine embedding model
5245
- if (knowledgePieceIndex === undefined) {
5245
+ try {
5246
+ // TODO: [🚐] Make arrayable LLMs -> single LLM DRY
5247
+ const _llms = arrayableToArray(tools.llm);
5248
+ const llmTools = _llms.length === 1 ? _llms[0] : joinLlmExecutionTools(..._llms);
5249
+ const taskEmbeddingPrompt = {
5250
+ title: 'Knowledge Search',
5251
+ modelRequirements: {
5252
+ modelVariant: 'EMBEDDING',
5253
+ modelName: firstKnowlegeIndex.modelName,
5254
+ },
5255
+ content: task.content,
5256
+ parameters: {
5257
+ /* !!!! */
5258
+ },
5259
+ };
5260
+ const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
5261
+ const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
5262
+ const { index } = knowledgePiece;
5263
+ const knowledgePieceIndex = index.find((i) => i.modelName === firstKnowlegeIndex.modelName);
5264
+ // <- TODO: Do not use just first knowledge piece and first index to determine embedding model
5265
+ if (knowledgePieceIndex === undefined) {
5266
+ return {
5267
+ content: knowledgePiece.content,
5268
+ relevance: 0,
5269
+ };
5270
+ }
5271
+ const relevance = computeCosineSimilarity(knowledgePieceIndex.position, taskEmbeddingResult.content);
5246
5272
  return {
5247
5273
  content: knowledgePiece.content,
5248
- relevance: 0,
5274
+ relevance,
5249
5275
  };
5250
- }
5251
- const relevance = computeCosineSimilarity(knowledgePieceIndex.position, taskEmbeddingResult.content);
5252
- return {
5253
- content: knowledgePiece.content,
5254
- relevance,
5255
- };
5256
- });
5257
- const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
5258
- const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
5259
- console.log('!!! Embedding', {
5260
- task,
5261
- taskEmbeddingPrompt,
5262
- taskEmbeddingResult,
5263
- firstKnowlegePiece,
5264
- firstKnowlegeIndex,
5265
- knowledgePiecesWithRelevance,
5266
- knowledgePiecesSorted,
5267
- knowledgePiecesLimited,
5268
- });
5269
- return knowledgePiecesLimited.map(({ content }) => `- ${content}`).join('\n');
5270
- // <- TODO: [🧠] Some smart aggregation of knowledge pieces, single-line vs multi-line vs mixed
5276
+ });
5277
+ const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
5278
+ const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
5279
+ console.log('!!! Embedding', {
5280
+ task,
5281
+ taskEmbeddingPrompt,
5282
+ taskEmbeddingResult,
5283
+ firstKnowlegePiece,
5284
+ firstKnowlegeIndex,
5285
+ knowledgePiecesWithRelevance,
5286
+ knowledgePiecesSorted,
5287
+ knowledgePiecesLimited,
5288
+ });
5289
+ return knowledgePiecesToString(knowledgePiecesLimited);
5290
+ }
5291
+ catch (error) {
5292
+ assertsError(error);
5293
+ console.error('Error in `getKnowledgeForTask`', error);
5294
+ // Note: If the LLM fails, just return all knowledge pieces
5295
+ return knowledgePiecesToString(preparedPipeline.knowledgePieces);
5296
+ }
5271
5297
  }
5272
5298
  /**
5273
5299
  * TODO: !!!! Verify if this is working