@promptbook/legacy-documents 0.92.0-32 → 0.92.0-34

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.
@@ -102,12 +102,12 @@ import { createLlmToolsFromConfiguration } from '../llm-providers/_common/regist
102
102
  import { cacheLlmTools } from '../llm-providers/_common/utils/cache/cacheLlmTools';
103
103
  import { countUsage } from '../llm-providers/_common/utils/count-total-usage/countUsage';
104
104
  import { limitTotalUsage } from '../llm-providers/_common/utils/count-total-usage/limitTotalUsage';
105
+ import { joinLlmExecutionTools } from '../llm-providers/_multiple/joinLlmExecutionTools';
106
+ import { MultipleLlmExecutionTools } from '../llm-providers/_multiple/MultipleLlmExecutionTools';
105
107
  import { _AnthropicClaudeMetadataRegistration } from '../llm-providers/anthropic-claude/register-configuration';
106
108
  import { _AzureOpenAiMetadataRegistration } from '../llm-providers/azure-openai/register-configuration';
107
109
  import { _DeepseekMetadataRegistration } from '../llm-providers/deepseek/register-configuration';
108
110
  import { _GoogleMetadataRegistration } from '../llm-providers/google/register-configuration';
109
- import { joinLlmExecutionTools } from '../llm-providers/multiple/joinLlmExecutionTools';
110
- import { MultipleLlmExecutionTools } from '../llm-providers/multiple/MultipleLlmExecutionTools';
111
111
  import { _OpenAiMetadataRegistration } from '../llm-providers/openai/register-configuration';
112
112
  import { _OpenAiAssistantMetadataRegistration } from '../llm-providers/openai/register-configuration';
113
113
  import { migratePipeline } from '../migrations/migratePipeline';
@@ -249,12 +249,12 @@ export { createLlmToolsFromConfiguration };
249
249
  export { cacheLlmTools };
250
250
  export { countUsage };
251
251
  export { limitTotalUsage };
252
+ export { joinLlmExecutionTools };
253
+ export { MultipleLlmExecutionTools };
252
254
  export { _AnthropicClaudeMetadataRegistration };
253
255
  export { _AzureOpenAiMetadataRegistration };
254
256
  export { _DeepseekMetadataRegistration };
255
257
  export { _GoogleMetadataRegistration };
256
- export { joinLlmExecutionTools };
257
- export { MultipleLlmExecutionTools };
258
258
  export { _OpenAiMetadataRegistration };
259
259
  export { _OpenAiAssistantMetadataRegistration };
260
260
  export { migratePipeline };
@@ -134,6 +134,7 @@ import type { JavascriptExecutionToolsOptions } from '../scripting/javascript/Ja
134
134
  import type { PostprocessingFunction } from '../scripting/javascript/JavascriptExecutionToolsOptions';
135
135
  import type { PromptbookStorage } from '../storage/_common/PromptbookStorage';
136
136
  import type { FileCacheStorageOptions } from '../storage/file-cache-storage/FileCacheStorageOptions';
137
+ import type { IndexedDbStorageOptions } from '../storage/local-storage/utils/IndexedDbStorageOptions';
137
138
  import type { IntermediateFilesStrategy } from '../types/IntermediateFilesStrategy';
138
139
  import type { ModelRequirements } from '../types/ModelRequirements';
139
140
  import type { CompletionModelRequirements } from '../types/ModelRequirements';
@@ -431,6 +432,7 @@ export type { JavascriptExecutionToolsOptions };
431
432
  export type { PostprocessingFunction };
432
433
  export type { PromptbookStorage };
433
434
  export type { FileCacheStorageOptions };
435
+ export type { IndexedDbStorageOptions };
434
436
  export type { IntermediateFilesStrategy };
435
437
  export type { ModelRequirements };
436
438
  export type { CompletionModelRequirements };
@@ -2,6 +2,7 @@ import type { Observable } from 'rxjs';
2
2
  import { PartialDeep } from 'type-fest';
3
3
  import type { task_id } from '../types/typeAliases';
4
4
  import type { string_SCREAMING_CASE } from '../utils/normalization/normalizeTo_SCREAMING_CASE';
5
+ import type { string_promptbook_version } from '../version';
5
6
  import type { AbstractTaskResult } from './AbstractTaskResult';
6
7
  import type { PipelineExecutorResult } from './PipelineExecutorResult';
7
8
  /**
@@ -12,12 +13,21 @@ type CreateTaskOptions<TTaskResult extends AbstractTaskResult> = {
12
13
  * The type of task to create
13
14
  */
14
15
  readonly taskType: AbstractTask<TTaskResult>['taskType'];
16
+ /**
17
+ * Human-readable title of the task - used for displaying in the UI
18
+ */
19
+ readonly title: AbstractTask<TTaskResult>['title'];
15
20
  /**
16
21
  * Callback that processes the task and updates the ongoing result
17
22
  * @param ongoingResult The partial result of the task processing
18
23
  * @returns The final task result
19
24
  */
20
- taskProcessCallback(updateOngoingResult: (newOngoingResult: PartialDeep<TTaskResult>) => void): Promise<TTaskResult>;
25
+ taskProcessCallback(updateOngoingResult: (newOngoingResult: PartialDeep<TTaskResult> & {
26
+ /**
27
+ * Optional update of the task title
28
+ */
29
+ readonly title?: AbstractTask<TTaskResult>['title'];
30
+ }) => void): Promise<TTaskResult>;
21
31
  };
22
32
  /**
23
33
  * Helper to create a new task
@@ -52,10 +62,18 @@ export type AbstractTask<TTaskResult extends AbstractTaskResult> = {
52
62
  * Type of the task
53
63
  */
54
64
  readonly taskType: string_SCREAMING_CASE;
65
+ /**
66
+ * Version of the promptbook used to run the task
67
+ */
68
+ readonly promptbookVersion: string_promptbook_version;
55
69
  /**
56
70
  * Unique identifier for the task
57
71
  */
58
72
  readonly taskId: task_id;
73
+ /**
74
+ * Human-readable title of the task - used for displaying in the UI
75
+ */
76
+ readonly title: string;
59
77
  /**
60
78
  * Status of the task
61
79
  */
@@ -1,4 +1,4 @@
1
- import { MultipleLlmExecutionTools } from '../../multiple/MultipleLlmExecutionTools';
1
+ import { MultipleLlmExecutionTools } from '../../_multiple/MultipleLlmExecutionTools';
2
2
  import type { CreateLlmToolsFromConfigurationOptions } from './createLlmToolsFromConfiguration';
3
3
  /**
4
4
  * Automatically configures LLM tools from environment variables in Node.js
@@ -1,5 +1,5 @@
1
1
  import type { string_user_id } from '../../../types/typeAliases';
2
- import { MultipleLlmExecutionTools } from '../../multiple/MultipleLlmExecutionTools';
2
+ import { MultipleLlmExecutionTools } from '../../_multiple/MultipleLlmExecutionTools';
3
3
  import type { LlmToolsConfiguration } from './LlmToolsConfiguration';
4
4
  /**
5
5
  * Options for `$provideLlmToolsFromEnv`
@@ -9,6 +9,10 @@ import type { string_user_id } from '../../types/typeAliases';
9
9
  * @public exported from `@promptbook/azure-openai`
10
10
  */
11
11
  export type AzureOpenAiExecutionToolsOptions = CommonToolsOptions & {
12
+ /**
13
+ * The API key of the Azure OpenAI resource
14
+ */
15
+ readonly apiKey: string_token;
12
16
  /**
13
17
  * The resource name of the Azure OpenAI resource
14
18
  *
@@ -23,10 +27,6 @@ export type AzureOpenAiExecutionToolsOptions = CommonToolsOptions & {
23
27
  * Note: Typically you have one resource and multiple deployments.
24
28
  */
25
29
  readonly deploymentName: string_name;
26
- /**
27
- * The API key of the Azure OpenAI resource
28
- */
29
- readonly apiKey: string_token;
30
30
  /**
31
31
  * A unique identifier representing your end-user, which can help Azure OpenAI to monitor
32
32
  * and detect abuse.
@@ -1,10 +1,11 @@
1
1
  import type { PromptbookStorage } from '../_common/PromptbookStorage';
2
+ import type { IndexedDbStorageOptions } from './utils/IndexedDbStorageOptions';
2
3
  /**
3
4
  * Gets wrapper around IndexedDB which can be used as PromptbookStorage
4
5
  *
5
6
  * @public exported from `@promptbook/browser`
6
7
  */
7
- export declare function getIndexedDbStorage<TItem>(): PromptbookStorage<TItem>;
8
+ export declare function getIndexedDbStorage<TItem>(options: IndexedDbStorageOptions): PromptbookStorage<TItem>;
8
9
  /**
9
10
  * Note: [🔵] Code in this file should never be published outside of `@promptbook/browser`
10
11
  */
@@ -0,0 +1,14 @@
1
+ import type { string_name } from '../../../types/typeAliases';
2
+ /**
3
+ * Options for IndexedDB storage
4
+ */
5
+ export type IndexedDbStorageOptions = {
6
+ /**
7
+ * Name of the database
8
+ */
9
+ databaseName: string_name;
10
+ /**
11
+ * Name of the object store (table) in the database
12
+ */
13
+ storeName: string_name;
14
+ };
@@ -1,7 +1,8 @@
1
1
  import type { PromptbookStorage } from '../../_common/PromptbookStorage';
2
+ import type { IndexedDbStorageOptions } from './IndexedDbStorageOptions';
2
3
  /**
3
4
  * Creates a PromptbookStorage backed by IndexedDB.
4
5
  * Uses a single object store named 'promptbook'.
5
6
  * @private for `getIndexedDbStorage`
6
7
  */
7
- export declare function makePromptbookStorageFromIndexedDb<TValue>(dbName?: string, storeName?: string): PromptbookStorage<TValue>;
8
+ export declare function makePromptbookStorageFromIndexedDb<TValue>(options: IndexedDbStorageOptions): PromptbookStorage<TValue>;
@@ -15,7 +15,7 @@ export declare const BOOK_LANGUAGE_VERSION: string_semantic_version;
15
15
  export declare const PROMPTBOOK_ENGINE_VERSION: string_promptbook_version;
16
16
  /**
17
17
  * Represents the version string of the Promptbook engine.
18
- * It follows semantic versioning (e.g., `0.92.0-31`).
18
+ * It follows semantic versioning (e.g., `0.92.0-33`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/legacy-documents",
3
- "version": "0.92.0-32",
3
+ "version": "0.92.0-34",
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/legacy-documents.index.d.ts",
53
53
  "peerDependencies": {
54
- "@promptbook/core": "0.92.0-32"
54
+ "@promptbook/core": "0.92.0-34"
55
55
  },
56
56
  "dependencies": {
57
57
  "colors": "1.4.0",
package/umd/index.umd.js CHANGED
@@ -26,7 +26,7 @@
26
26
  * @generated
27
27
  * @see https://github.com/webgptorg/promptbook
28
28
  */
29
- const PROMPTBOOK_ENGINE_VERSION = '0.92.0-32';
29
+ const PROMPTBOOK_ENGINE_VERSION = '0.92.0-34';
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
@@ -2673,6 +2673,7 @@
2673
2673
  */
2674
2674
  function createTask(options) {
2675
2675
  const { taskType, taskProcessCallback } = options;
2676
+ let { title } = options;
2676
2677
  // TODO: [🐙] DRY
2677
2678
  const taskId = `${taskType.toLowerCase().substring(0, 4)}-${$randomToken(8 /* <- TODO: To global config + Use Base58 to avoid simmilar char conflicts */)}`;
2678
2679
  let status = 'RUNNING';
@@ -2684,6 +2685,10 @@
2684
2685
  const partialResultSubject = new rxjs.Subject();
2685
2686
  // <- Note: Not using `BehaviorSubject` because on error we can't access the last value
2686
2687
  const finalResultPromise = /* not await */ taskProcessCallback((newOngoingResult) => {
2688
+ if (newOngoingResult.title) {
2689
+ title = newOngoingResult.title;
2690
+ }
2691
+ updatedAt = new Date();
2687
2692
  Object.assign(currentValue, newOngoingResult);
2688
2693
  // <- TODO: assign deep
2689
2694
  partialResultSubject.next(newOngoingResult);
@@ -2729,17 +2734,24 @@
2729
2734
  return {
2730
2735
  taskType,
2731
2736
  taskId,
2737
+ get promptbookVersion() {
2738
+ return PROMPTBOOK_ENGINE_VERSION;
2739
+ },
2740
+ get title() {
2741
+ return title;
2742
+ // <- Note: [1] Theese must be getters to allow changing the value in the future
2743
+ },
2732
2744
  get status() {
2733
2745
  return status;
2734
- // <- Note: [1] Theese must be getters to allow changing the value in the future
2746
+ // <- Note: [1] --||--
2735
2747
  },
2736
2748
  get createdAt() {
2737
2749
  return createdAt;
2738
- // <- Note: [1]
2750
+ // <- Note: [1] --||--
2739
2751
  },
2740
2752
  get updatedAt() {
2741
2753
  return updatedAt;
2742
- // <- Note: [1]
2754
+ // <- Note: [1] --||--
2743
2755
  },
2744
2756
  asPromise,
2745
2757
  asObservable() {
@@ -2747,15 +2759,15 @@
2747
2759
  },
2748
2760
  get errors() {
2749
2761
  return errors;
2750
- // <- Note: [1]
2762
+ // <- Note: [1] --||--
2751
2763
  },
2752
2764
  get warnings() {
2753
2765
  return warnings;
2754
- // <- Note: [1]
2766
+ // <- Note: [1] --||--
2755
2767
  },
2756
2768
  get currentValue() {
2757
2769
  return currentValue;
2758
- // <- Note: [1]
2770
+ // <- Note: [1] --||--
2759
2771
  },
2760
2772
  };
2761
2773
  }
@@ -2920,12 +2932,14 @@
2920
2932
  const spending = new rxjs.Subject();
2921
2933
  const proxyTools = {
2922
2934
  get title() {
2923
- // TODO: [🧠] Maybe put here some suffix
2924
- return llmTools.title;
2935
+ return `${llmTools.title} (+usage)`;
2936
+ // <- TODO: [🧈] Maybe standartize the suffix when wrapping `LlmExecutionTools` up
2937
+ // <- TODO: [🧈][🧠] Does it make sence to suffix "(+usage)"?
2925
2938
  },
2926
2939
  get description() {
2927
- // TODO: [🧠] Maybe put here some suffix
2928
- return llmTools.description;
2940
+ return `${llmTools.description} (+usage)`;
2941
+ // <- TODO: [🧈] Maybe standartize the suffix when wrapping `LlmExecutionTools` up
2942
+ // <- TODO: [🧈][🧠] Does it make sence to suffix "(+usage)"?
2929
2943
  },
2930
2944
  checkConfiguration() {
2931
2945
  return /* not await */ llmTools.checkConfiguration();
@@ -2996,7 +3010,14 @@
2996
3010
  return 'Multiple LLM Providers';
2997
3011
  }
2998
3012
  get description() {
2999
- return this.llmExecutionTools.map(({ title }, index) => `${index + 1}) \`${title}\``).join('\n');
3013
+ const innerModelsTitlesAndDescriptions = this.llmExecutionTools
3014
+ .map(({ title, description }, index) => `${index + 1}) \`${title}\`\n${description}`)
3015
+ .join('\n\n');
3016
+ return spaceTrim__default["default"]((block) => `
3017
+ Multiple LLM Providers:
3018
+
3019
+ ${block(innerModelsTitlesAndDescriptions)}
3020
+ `);
3000
3021
  }
3001
3022
  /**
3002
3023
  * Check the configuration of all execution tools
@@ -5475,6 +5496,7 @@
5475
5496
  */
5476
5497
  async function getKnowledgeForTask(options) {
5477
5498
  const { tools, preparedPipeline, task, parameters } = options;
5499
+ console.log('!!! getKnowledgeForTask', options);
5478
5500
  const firstKnowlegePiece = preparedPipeline.knowledgePieces[0];
5479
5501
  const firstKnowlegeIndex = firstKnowlegePiece === null || firstKnowlegePiece === void 0 ? void 0 : firstKnowlegePiece.index[0];
5480
5502
  // <- TODO: Do not use just first knowledge piece and first index to determine embedding model, use also keyword search
@@ -5513,7 +5535,7 @@
5513
5535
  });
5514
5536
  const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
5515
5537
  const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
5516
- console.log('!!! Embedding', {
5538
+ console.log('!!! `getKnowledgeForTask` Embedding', {
5517
5539
  task,
5518
5540
  taskEmbeddingPrompt,
5519
5541
  taskEmbeddingResult,
@@ -5549,6 +5571,7 @@
5549
5571
  */
5550
5572
  async function getReservedParametersForTask(options) {
5551
5573
  const { tools, preparedPipeline, task, parameters, pipelineIdentification } = options;
5574
+ console.log('!!! getReservedParametersForTask', options);
5552
5575
  const context = await getContextForTask(); // <- [🏍]
5553
5576
  const knowledge = await getKnowledgeForTask({ tools, preparedPipeline, task, parameters });
5554
5577
  const examples = await getExamplesForTask();
@@ -5585,6 +5608,7 @@
5585
5608
  */
5586
5609
  async function executeTask(options) {
5587
5610
  const { currentTask, preparedPipeline, parametersToPass, tools, onProgress, $executionReport, pipelineIdentification, maxExecutionAttempts, maxParallelCount, csvSettings, isVerbose, rootDirname, cacheDirname, intermediateFilesStrategy, isAutoInstalled, isNotPreparedWarningSupressed, } = options;
5611
+ console.log('!!! executeTask', options);
5588
5612
  const priority = preparedPipeline.tasks.length - preparedPipeline.tasks.indexOf(currentTask);
5589
5613
  // Note: Check consistency of used and dependent parameters which was also done in `validatePipeline`, but it’s good to doublecheck
5590
5614
  const usedParameterNames = extractParameterNamesFromTask(currentTask);
@@ -5608,14 +5632,15 @@
5608
5632
 
5609
5633
  `));
5610
5634
  }
5635
+ const reservedParameters = await getReservedParametersForTask({
5636
+ tools,
5637
+ preparedPipeline,
5638
+ task: currentTask,
5639
+ pipelineIdentification,
5640
+ parameters: parametersToPass,
5641
+ });
5611
5642
  const definedParameters = Object.freeze({
5612
- ...(await getReservedParametersForTask({
5613
- tools,
5614
- preparedPipeline,
5615
- task: currentTask,
5616
- pipelineIdentification,
5617
- parameters: parametersToPass,
5618
- })),
5643
+ ...reservedParameters,
5619
5644
  ...parametersToPass,
5620
5645
  });
5621
5646
  const definedParameterNames = new Set(Object.keys(definedParameters));
@@ -6062,6 +6087,7 @@
6062
6087
  };
6063
6088
  const pipelineExecutor = (inputParameters) => createTask({
6064
6089
  taskType: 'EXECUTION',
6090
+ title: pipeline.title,
6065
6091
  taskProcessCallback(updateOngoingResult) {
6066
6092
  return pipelineExecutorWithCallback(inputParameters, async (newOngoingResult) => {
6067
6093
  updateOngoingResult(newOngoingResult);
@@ -6192,6 +6218,12 @@
6192
6218
  }
6193
6219
  // ---
6194
6220
  if (!llmTools.callEmbeddingModel) {
6221
+ console.log('!!! No callEmbeddingModel function provided', {
6222
+ 'llmTools.title': llmTools.title,
6223
+ 'llmTools.description': llmTools.description,
6224
+ 'llmTools.callEmbeddingModel': llmTools.callEmbeddingModel,
6225
+ llmTools,
6226
+ });
6195
6227
  // TODO: [🟥] Detect browser / node and make it colorfull
6196
6228
  console.error('No callEmbeddingModel function provided');
6197
6229
  }