@promptbook/remote-server 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
@@ -33,7 +33,7 @@ const BOOK_LANGUAGE_VERSION = '1.0.0';
33
33
  * @generated
34
34
  * @see https://github.com/webgptorg/promptbook
35
35
  */
36
- const PROMPTBOOK_ENGINE_VERSION = '0.92.0-15';
36
+ const PROMPTBOOK_ENGINE_VERSION = '0.92.0-16';
37
37
  /**
38
38
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
39
39
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -4897,10 +4897,12 @@ function templateParameters(template, parameters) {
4897
4897
  throw new PipelineExecutionError('Parameter is already opened or not closed');
4898
4898
  }
4899
4899
  if (parameters[parameterName] === undefined) {
4900
+ console.log('!!! templateParameters 1', { parameterName, template, parameters });
4900
4901
  throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
4901
4902
  }
4902
4903
  let parameterValue = parameters[parameterName];
4903
4904
  if (parameterValue === undefined) {
4905
+ console.log('!!! templateParameters 2', { parameterName, template, parameters });
4904
4906
  throw new PipelineExecutionError(`Parameter \`{${parameterName}}\` is not defined`);
4905
4907
  }
4906
4908
  parameterValue = valueToString(parameterValue);
@@ -5556,6 +5558,23 @@ function computeCosineSimilarity(embeddingVector1, embeddingVector2) {
5556
5558
  return 1 - dotProduct / (magnitude1 * magnitude2);
5557
5559
  }
5558
5560
 
5561
+ /**
5562
+ *
5563
+ * @param knowledgePieces
5564
+ * @returns
5565
+ *
5566
+ * @private internal utility of `createPipelineExecutor`
5567
+ */
5568
+ function knowledgePiecesToString(knowledgePieces) {
5569
+ return knowledgePieces
5570
+ .map((knowledgePiece) => {
5571
+ const { content } = knowledgePiece;
5572
+ return `- ${content}`;
5573
+ })
5574
+ .join('\n');
5575
+ // <- TODO: [🧠] Some smarter aggregation of knowledge pieces, single-line vs multi-line vs mixed
5576
+ }
5577
+
5559
5578
  /**
5560
5579
  * @@@
5561
5580
  *
@@ -5569,53 +5588,60 @@ async function getKnowledgeForTask(options) {
5569
5588
  const firstKnowlegeIndex = firstKnowlegePiece === null || firstKnowlegePiece === void 0 ? void 0 : firstKnowlegePiece.index[0];
5570
5589
  // <- TODO: Do not use just first knowledge piece and first index to determine embedding model, use also keyword search
5571
5590
  if (firstKnowlegePiece === undefined || firstKnowlegeIndex === undefined) {
5572
- return 'No knowledge pieces found';
5591
+ return ''; // <- Note: Np knowledge present, return empty string
5573
5592
  }
5574
- // TODO: [🚐] Make arrayable LLMs -> single LLM DRY
5575
- const _llms = arrayableToArray(tools.llm);
5576
- const llmTools = _llms.length === 1 ? _llms[0] : joinLlmExecutionTools(..._llms);
5577
- const taskEmbeddingPrompt = {
5578
- title: 'Knowledge Search',
5579
- modelRequirements: {
5580
- modelVariant: 'EMBEDDING',
5581
- modelName: firstKnowlegeIndex.modelName,
5582
- },
5583
- content: task.content,
5584
- parameters: {
5585
- /* !!!! */
5586
- },
5587
- };
5588
- const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
5589
- const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
5590
- const { index } = knowledgePiece;
5591
- const knowledgePieceIndex = index.find((i) => i.modelName === firstKnowlegeIndex.modelName);
5592
- // <- TODO: Do not use just first knowledge piece and first index to determine embedding model
5593
- if (knowledgePieceIndex === undefined) {
5593
+ try {
5594
+ // TODO: [🚐] Make arrayable LLMs -> single LLM DRY
5595
+ const _llms = arrayableToArray(tools.llm);
5596
+ const llmTools = _llms.length === 1 ? _llms[0] : joinLlmExecutionTools(..._llms);
5597
+ const taskEmbeddingPrompt = {
5598
+ title: 'Knowledge Search',
5599
+ modelRequirements: {
5600
+ modelVariant: 'EMBEDDING',
5601
+ modelName: firstKnowlegeIndex.modelName,
5602
+ },
5603
+ content: task.content,
5604
+ parameters: {
5605
+ /* !!!! */
5606
+ },
5607
+ };
5608
+ const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
5609
+ const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
5610
+ const { index } = knowledgePiece;
5611
+ const knowledgePieceIndex = index.find((i) => i.modelName === firstKnowlegeIndex.modelName);
5612
+ // <- TODO: Do not use just first knowledge piece and first index to determine embedding model
5613
+ if (knowledgePieceIndex === undefined) {
5614
+ return {
5615
+ content: knowledgePiece.content,
5616
+ relevance: 0,
5617
+ };
5618
+ }
5619
+ const relevance = computeCosineSimilarity(knowledgePieceIndex.position, taskEmbeddingResult.content);
5594
5620
  return {
5595
5621
  content: knowledgePiece.content,
5596
- relevance: 0,
5622
+ relevance,
5597
5623
  };
5598
- }
5599
- const relevance = computeCosineSimilarity(knowledgePieceIndex.position, taskEmbeddingResult.content);
5600
- return {
5601
- content: knowledgePiece.content,
5602
- relevance,
5603
- };
5604
- });
5605
- const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
5606
- const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
5607
- console.log('!!! Embedding', {
5608
- task,
5609
- taskEmbeddingPrompt,
5610
- taskEmbeddingResult,
5611
- firstKnowlegePiece,
5612
- firstKnowlegeIndex,
5613
- knowledgePiecesWithRelevance,
5614
- knowledgePiecesSorted,
5615
- knowledgePiecesLimited,
5616
- });
5617
- return knowledgePiecesLimited.map(({ content }) => `- ${content}`).join('\n');
5618
- // <- TODO: [🧠] Some smart aggregation of knowledge pieces, single-line vs multi-line vs mixed
5624
+ });
5625
+ const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
5626
+ const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
5627
+ console.log('!!! Embedding', {
5628
+ task,
5629
+ taskEmbeddingPrompt,
5630
+ taskEmbeddingResult,
5631
+ firstKnowlegePiece,
5632
+ firstKnowlegeIndex,
5633
+ knowledgePiecesWithRelevance,
5634
+ knowledgePiecesSorted,
5635
+ knowledgePiecesLimited,
5636
+ });
5637
+ return knowledgePiecesToString(knowledgePiecesLimited);
5638
+ }
5639
+ catch (error) {
5640
+ assertsError(error);
5641
+ console.error('Error in `getKnowledgeForTask`', error);
5642
+ // Note: If the LLM fails, just return all knowledge pieces
5643
+ return knowledgePiecesToString(preparedPipeline.knowledgePieces);
5644
+ }
5619
5645
  }
5620
5646
  /**
5621
5647
  * TODO: !!!! Verify if this is working
@@ -7955,6 +7981,7 @@ function startRemoteServer(options) {
7955
7981
  promptResult = await llm.callCompletionModel(prompt);
7956
7982
  break;
7957
7983
  case 'EMBEDDING':
7984
+ console.log('!!! llm');
7958
7985
  if (llm.callEmbeddingModel === undefined) {
7959
7986
  // Note: [0] This check should not be a thing
7960
7987
  throw new PipelineExecutionError(`Embedding model is not available`);