@promptbook/markdown-utils 0.92.0-31 β†’ 0.92.0-33

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.
@@ -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
  */
@@ -2,6 +2,7 @@ import Anthropic from '@anthropic-ai/sdk';
2
2
  import type { AvailableModel } from '../../execution/AvailableModel';
3
3
  import type { LlmExecutionTools } from '../../execution/LlmExecutionTools';
4
4
  import type { ChatPromptResult } from '../../execution/PromptResult';
5
+ import type { CompletionPromptResult } from '../../execution/PromptResult';
5
6
  import type { Prompt } from '../../types/Prompt';
6
7
  import type { string_markdown } from '../../types/typeAliases';
7
8
  import type { string_markdown_text } from '../../types/typeAliases';
@@ -19,6 +20,7 @@ export declare class AnthropicClaudeExecutionTools implements LlmExecutionTools
19
20
  * Anthropic Claude API client.
20
21
  */
21
22
  private client;
23
+ private limiter;
22
24
  /**
23
25
  * Creates Anthropic Claude Execution Tools.
24
26
  *
@@ -40,6 +42,10 @@ export declare class AnthropicClaudeExecutionTools implements LlmExecutionTools
40
42
  * Calls Anthropic Claude API to use a chat model.
41
43
  */
42
44
  callChatModel(prompt: Pick<Prompt, 'content' | 'parameters' | 'modelRequirements'>): Promise<ChatPromptResult>;
45
+ /**
46
+ * Calls Anthropic Claude API to use a completion model.
47
+ */
48
+ callCompletionModel(prompt: Pick<Prompt, 'content' | 'parameters' | 'modelRequirements'>): Promise<CompletionPromptResult>;
43
49
  /**
44
50
  * Get the model that should be used as default
45
51
  */
@@ -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-30`).
18
+ * It follows semantic versioning (e.g., `0.92.0-32`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/markdown-utils",
3
- "version": "0.92.0-31",
3
+ "version": "0.92.0-33",
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,
package/umd/index.umd.js CHANGED
@@ -25,7 +25,7 @@
25
25
  * @generated
26
26
  * @see https://github.com/webgptorg/promptbook
27
27
  */
28
- const PROMPTBOOK_ENGINE_VERSION = '0.92.0-31';
28
+ const PROMPTBOOK_ENGINE_VERSION = '0.92.0-33';
29
29
  /**
30
30
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
31
31
  * Note: [πŸ’ž] Ignore a discrepancy between file name and entity name
@@ -2200,6 +2200,7 @@
2200
2200
  */
2201
2201
  function createTask(options) {
2202
2202
  const { taskType, taskProcessCallback } = options;
2203
+ let { title } = options;
2203
2204
  // TODO: [πŸ™] DRY
2204
2205
  const taskId = `${taskType.toLowerCase().substring(0, 4)}-${$randomToken(8 /* <- TODO: To global config + Use Base58 to avoid simmilar char conflicts */)}`;
2205
2206
  let status = 'RUNNING';
@@ -2211,6 +2212,10 @@
2211
2212
  const partialResultSubject = new rxjs.Subject();
2212
2213
  // <- Note: Not using `BehaviorSubject` because on error we can't access the last value
2213
2214
  const finalResultPromise = /* not await */ taskProcessCallback((newOngoingResult) => {
2215
+ if (newOngoingResult.title) {
2216
+ title = newOngoingResult.title;
2217
+ }
2218
+ updatedAt = new Date();
2214
2219
  Object.assign(currentValue, newOngoingResult);
2215
2220
  // <- TODO: assign deep
2216
2221
  partialResultSubject.next(newOngoingResult);
@@ -2256,17 +2261,24 @@
2256
2261
  return {
2257
2262
  taskType,
2258
2263
  taskId,
2264
+ get promptbookVersion() {
2265
+ return PROMPTBOOK_ENGINE_VERSION;
2266
+ },
2267
+ get title() {
2268
+ return title;
2269
+ // <- Note: [1] Theese must be getters to allow changing the value in the future
2270
+ },
2259
2271
  get status() {
2260
2272
  return status;
2261
- // <- Note: [1] Theese must be getters to allow changing the value in the future
2273
+ // <- Note: [1] --||--
2262
2274
  },
2263
2275
  get createdAt() {
2264
2276
  return createdAt;
2265
- // <- Note: [1]
2277
+ // <- Note: [1] --||--
2266
2278
  },
2267
2279
  get updatedAt() {
2268
2280
  return updatedAt;
2269
- // <- Note: [1]
2281
+ // <- Note: [1] --||--
2270
2282
  },
2271
2283
  asPromise,
2272
2284
  asObservable() {
@@ -2274,15 +2286,15 @@
2274
2286
  },
2275
2287
  get errors() {
2276
2288
  return errors;
2277
- // <- Note: [1]
2289
+ // <- Note: [1] --||--
2278
2290
  },
2279
2291
  get warnings() {
2280
2292
  return warnings;
2281
- // <- Note: [1]
2293
+ // <- Note: [1] --||--
2282
2294
  },
2283
2295
  get currentValue() {
2284
2296
  return currentValue;
2285
- // <- Note: [1]
2297
+ // <- Note: [1] --||--
2286
2298
  },
2287
2299
  };
2288
2300
  }
@@ -2529,23 +2541,17 @@
2529
2541
  * Check the configuration of all execution tools
2530
2542
  */
2531
2543
  async checkConfiguration() {
2532
- // TODO: Maybe do it in parallel
2533
- for (const llmExecutionTools of this.llmExecutionTools) {
2534
- await llmExecutionTools.checkConfiguration();
2535
- }
2544
+ // Note: Run checks in parallel
2545
+ await Promise.all(this.llmExecutionTools.map((tools) => tools.checkConfiguration()));
2536
2546
  }
2537
2547
  /**
2538
2548
  * List all available models that can be used
2539
2549
  * This lists is a combination of all available models from all execution tools
2540
2550
  */
2541
2551
  async listModels() {
2542
- const availableModels = [];
2543
- for (const llmExecutionTools of this.llmExecutionTools) {
2544
- // TODO: [πŸͺ‚] Obtain models in parallel
2545
- const models = await llmExecutionTools.listModels();
2546
- availableModels.push(...models);
2547
- }
2548
- return availableModels;
2552
+ // Obtain all models in parallel and flatten
2553
+ const modelArrays = await Promise.all(this.llmExecutionTools.map((tools) => tools.listModels()));
2554
+ return modelArrays.flat();
2549
2555
  }
2550
2556
  /**
2551
2557
  * Calls the best available chat model
@@ -5341,7 +5347,7 @@
5341
5347
  });
5342
5348
  const knowledgePiecesSorted = knowledgePiecesWithRelevance.sort((a, b) => a.relevance - b.relevance);
5343
5349
  const knowledgePiecesLimited = knowledgePiecesSorted.slice(0, 5);
5344
- console.log('!!! Embedding', {
5350
+ console.log('!!! `getKnowledgeForTask` Embedding', {
5345
5351
  task,
5346
5352
  taskEmbeddingPrompt,
5347
5353
  taskEmbeddingResult,
@@ -5377,6 +5383,7 @@
5377
5383
  */
5378
5384
  async function getReservedParametersForTask(options) {
5379
5385
  const { tools, preparedPipeline, task, parameters, pipelineIdentification } = options;
5386
+ console.log('!!! getReservedParametersForTask', options);
5380
5387
  const context = await getContextForTask(); // <- [🏍]
5381
5388
  const knowledge = await getKnowledgeForTask({ tools, preparedPipeline, task, parameters });
5382
5389
  const examples = await getExamplesForTask();
@@ -5413,6 +5420,7 @@
5413
5420
  */
5414
5421
  async function executeTask(options) {
5415
5422
  const { currentTask, preparedPipeline, parametersToPass, tools, onProgress, $executionReport, pipelineIdentification, maxExecutionAttempts, maxParallelCount, csvSettings, isVerbose, rootDirname, cacheDirname, intermediateFilesStrategy, isAutoInstalled, isNotPreparedWarningSupressed, } = options;
5423
+ console.log('!!! executeTask', options);
5416
5424
  const priority = preparedPipeline.tasks.length - preparedPipeline.tasks.indexOf(currentTask);
5417
5425
  // Note: Check consistency of used and dependent parameters which was also done in `validatePipeline`, but it’s good to doublecheck
5418
5426
  const usedParameterNames = extractParameterNamesFromTask(currentTask);
@@ -5436,14 +5444,15 @@
5436
5444
 
5437
5445
  `));
5438
5446
  }
5447
+ const reservedParameters = await getReservedParametersForTask({
5448
+ tools,
5449
+ preparedPipeline,
5450
+ task: currentTask,
5451
+ pipelineIdentification,
5452
+ parameters: parametersToPass,
5453
+ });
5439
5454
  const definedParameters = Object.freeze({
5440
- ...(await getReservedParametersForTask({
5441
- tools,
5442
- preparedPipeline,
5443
- task: currentTask,
5444
- pipelineIdentification,
5445
- parameters: parametersToPass,
5446
- })),
5455
+ ...reservedParameters,
5447
5456
  ...parametersToPass,
5448
5457
  });
5449
5458
  const definedParameterNames = new Set(Object.keys(definedParameters));
@@ -5890,6 +5899,7 @@
5890
5899
  };
5891
5900
  const pipelineExecutor = (inputParameters) => createTask({
5892
5901
  taskType: 'EXECUTION',
5902
+ title: pipeline.title,
5893
5903
  taskProcessCallback(updateOngoingResult) {
5894
5904
  return pipelineExecutorWithCallback(inputParameters, async (newOngoingResult) => {
5895
5905
  updateOngoingResult(newOngoingResult);