@promptbook/node 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/node",
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/node.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
@@ -46,7 +46,7 @@
46
46
  * @generated
47
47
  * @see https://github.com/webgptorg/promptbook
48
48
  */
49
- const PROMPTBOOK_ENGINE_VERSION = '0.92.0-32';
49
+ const PROMPTBOOK_ENGINE_VERSION = '0.92.0-34';
50
50
  /**
51
51
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
52
52
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -2102,6 +2102,7 @@
2102
2102
  */
2103
2103
  function createTask(options) {
2104
2104
  const { taskType, taskProcessCallback } = options;
2105
+ let { title } = options;
2105
2106
  // TODO: [🐙] DRY
2106
2107
  const taskId = `${taskType.toLowerCase().substring(0, 4)}-${$randomToken(8 /* <- TODO: To global config + Use Base58 to avoid simmilar char conflicts */)}`;
2107
2108
  let status = 'RUNNING';
@@ -2113,6 +2114,10 @@
2113
2114
  const partialResultSubject = new rxjs.Subject();
2114
2115
  // <- Note: Not using `BehaviorSubject` because on error we can't access the last value
2115
2116
  const finalResultPromise = /* not await */ taskProcessCallback((newOngoingResult) => {
2117
+ if (newOngoingResult.title) {
2118
+ title = newOngoingResult.title;
2119
+ }
2120
+ updatedAt = new Date();
2116
2121
  Object.assign(currentValue, newOngoingResult);
2117
2122
  // <- TODO: assign deep
2118
2123
  partialResultSubject.next(newOngoingResult);
@@ -2158,17 +2163,24 @@
2158
2163
  return {
2159
2164
  taskType,
2160
2165
  taskId,
2166
+ get promptbookVersion() {
2167
+ return PROMPTBOOK_ENGINE_VERSION;
2168
+ },
2169
+ get title() {
2170
+ return title;
2171
+ // <- Note: [1] Theese must be getters to allow changing the value in the future
2172
+ },
2161
2173
  get status() {
2162
2174
  return status;
2163
- // <- Note: [1] Theese must be getters to allow changing the value in the future
2175
+ // <- Note: [1] --||--
2164
2176
  },
2165
2177
  get createdAt() {
2166
2178
  return createdAt;
2167
- // <- Note: [1]
2179
+ // <- Note: [1] --||--
2168
2180
  },
2169
2181
  get updatedAt() {
2170
2182
  return updatedAt;
2171
- // <- Note: [1]
2183
+ // <- Note: [1] --||--
2172
2184
  },
2173
2185
  asPromise,
2174
2186
  asObservable() {
@@ -2176,15 +2188,15 @@
2176
2188
  },
2177
2189
  get errors() {
2178
2190
  return errors;
2179
- // <- Note: [1]
2191
+ // <- Note: [1] --||--
2180
2192
  },
2181
2193
  get warnings() {
2182
2194
  return warnings;
2183
- // <- Note: [1]
2195
+ // <- Note: [1] --||--
2184
2196
  },
2185
2197
  get currentValue() {
2186
2198
  return currentValue;
2187
- // <- Note: [1]
2199
+ // <- Note: [1] --||--
2188
2200
  },
2189
2201
  };
2190
2202
  }
@@ -2926,7 +2938,14 @@
2926
2938
  return 'Multiple LLM Providers';
2927
2939
  }
2928
2940
  get description() {
2929
- return this.llmExecutionTools.map(({ title }, index) => `${index + 1}) \`${title}\``).join('\n');
2941
+ const innerModelsTitlesAndDescriptions = this.llmExecutionTools
2942
+ .map(({ title, description }, index) => `${index + 1}) \`${title}\`\n${description}`)
2943
+ .join('\n\n');
2944
+ return spaceTrim__default["default"]((block) => `
2945
+ Multiple LLM Providers:
2946
+
2947
+ ${block(innerModelsTitlesAndDescriptions)}
2948
+ `);
2930
2949
  }
2931
2950
  /**
2932
2951
  * Check the configuration of all execution tools
@@ -4258,6 +4277,7 @@
4258
4277
  */
4259
4278
  async function getKnowledgeForTask(options) {
4260
4279
  const { tools, preparedPipeline, task, parameters } = options;
4280
+ console.log('!!! getKnowledgeForTask', options);
4261
4281
  const firstKnowlegePiece = preparedPipeline.knowledgePieces[0];
4262
4282
  const firstKnowlegeIndex = firstKnowlegePiece === null || firstKnowlegePiece === void 0 ? void 0 : firstKnowlegePiece.index[0];
4263
4283
  // <- TODO: Do not use just first knowledge piece and first index to determine embedding model, use also keyword search
@@ -4296,7 +4316,7 @@
4296
4316
  });
4297
4317
  const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
4298
4318
  const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
4299
- console.log('!!! Embedding', {
4319
+ console.log('!!! `getKnowledgeForTask` Embedding', {
4300
4320
  task,
4301
4321
  taskEmbeddingPrompt,
4302
4322
  taskEmbeddingResult,
@@ -4332,6 +4352,7 @@
4332
4352
  */
4333
4353
  async function getReservedParametersForTask(options) {
4334
4354
  const { tools, preparedPipeline, task, parameters, pipelineIdentification } = options;
4355
+ console.log('!!! getReservedParametersForTask', options);
4335
4356
  const context = await getContextForTask(); // <- [🏍]
4336
4357
  const knowledge = await getKnowledgeForTask({ tools, preparedPipeline, task, parameters });
4337
4358
  const examples = await getExamplesForTask();
@@ -4368,6 +4389,7 @@
4368
4389
  */
4369
4390
  async function executeTask(options) {
4370
4391
  const { currentTask, preparedPipeline, parametersToPass, tools, onProgress, $executionReport, pipelineIdentification, maxExecutionAttempts, maxParallelCount, csvSettings, isVerbose, rootDirname, cacheDirname, intermediateFilesStrategy, isAutoInstalled, isNotPreparedWarningSupressed, } = options;
4392
+ console.log('!!! executeTask', options);
4371
4393
  const priority = preparedPipeline.tasks.length - preparedPipeline.tasks.indexOf(currentTask);
4372
4394
  // Note: Check consistency of used and dependent parameters which was also done in `validatePipeline`, but it’s good to doublecheck
4373
4395
  const usedParameterNames = extractParameterNamesFromTask(currentTask);
@@ -4391,14 +4413,15 @@
4391
4413
 
4392
4414
  `));
4393
4415
  }
4416
+ const reservedParameters = await getReservedParametersForTask({
4417
+ tools,
4418
+ preparedPipeline,
4419
+ task: currentTask,
4420
+ pipelineIdentification,
4421
+ parameters: parametersToPass,
4422
+ });
4394
4423
  const definedParameters = Object.freeze({
4395
- ...(await getReservedParametersForTask({
4396
- tools,
4397
- preparedPipeline,
4398
- task: currentTask,
4399
- pipelineIdentification,
4400
- parameters: parametersToPass,
4401
- })),
4424
+ ...reservedParameters,
4402
4425
  ...parametersToPass,
4403
4426
  });
4404
4427
  const definedParameterNames = new Set(Object.keys(definedParameters));
@@ -4845,6 +4868,7 @@
4845
4868
  };
4846
4869
  const pipelineExecutor = (inputParameters) => createTask({
4847
4870
  taskType: 'EXECUTION',
4871
+ title: pipeline.title,
4848
4872
  taskProcessCallback(updateOngoingResult) {
4849
4873
  return pipelineExecutorWithCallback(inputParameters, async (newOngoingResult) => {
4850
4874
  updateOngoingResult(newOngoingResult);
@@ -4896,12 +4920,14 @@
4896
4920
  const spending = new rxjs.Subject();
4897
4921
  const proxyTools = {
4898
4922
  get title() {
4899
- // TODO: [🧠] Maybe put here some suffix
4900
- return llmTools.title;
4923
+ return `${llmTools.title} (+usage)`;
4924
+ // <- TODO: [🧈] Maybe standartize the suffix when wrapping `LlmExecutionTools` up
4925
+ // <- TODO: [🧈][🧠] Does it make sence to suffix "(+usage)"?
4901
4926
  },
4902
4927
  get description() {
4903
- // TODO: [🧠] Maybe put here some suffix
4904
- return llmTools.description;
4928
+ return `${llmTools.description} (+usage)`;
4929
+ // <- TODO: [🧈] Maybe standartize the suffix when wrapping `LlmExecutionTools` up
4930
+ // <- TODO: [🧈][🧠] Does it make sence to suffix "(+usage)"?
4905
4931
  },
4906
4932
  checkConfiguration() {
4907
4933
  return /* not await */ llmTools.checkConfiguration();