@promptbook/openai 0.103.0-4 → 0.103.0-40

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.
Files changed (143) hide show
  1. package/README.md +64 -30
  2. package/esm/index.es.js +166 -8
  3. package/esm/index.es.js.map +1 -1
  4. package/esm/typings/books/index.d.ts +0 -81
  5. package/esm/typings/src/_packages/browser.index.d.ts +6 -0
  6. package/esm/typings/src/_packages/cli.index.d.ts +4 -0
  7. package/esm/typings/src/_packages/components.index.d.ts +12 -8
  8. package/esm/typings/src/_packages/core.index.d.ts +30 -10
  9. package/esm/typings/src/_packages/node.index.d.ts +4 -2
  10. package/esm/typings/src/_packages/types.index.d.ts +18 -2
  11. package/esm/typings/src/_packages/wizard.index.d.ts +4 -0
  12. package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +1 -0
  13. package/esm/typings/src/book-2.0/agent-source/padBook.d.ts +16 -0
  14. package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +76 -15
  15. package/esm/typings/src/book-components/BookEditor/BookEditorActionbar.d.ts +14 -0
  16. package/esm/typings/src/book-components/BookEditor/BookEditorMonaco.d.ts +5 -0
  17. package/esm/typings/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +15 -0
  18. package/esm/typings/src/book-components/Chat/MockedChat/MockedChat.d.ts +5 -0
  19. package/esm/typings/src/book-components/Chat/save/html/htmlSaveFormatDefinition.d.ts +1 -0
  20. package/esm/typings/src/book-components/Chat/save/pdf/pdfSaveFormatDefinition.d.ts +4 -0
  21. package/esm/typings/src/book-components/Qr/BrandedQrCode.d.ts +18 -0
  22. package/esm/typings/src/book-components/Qr/GenericQrCode.d.ts +10 -0
  23. package/esm/typings/src/book-components/Qr/PromptbookQrCode.d.ts +18 -0
  24. package/esm/typings/src/book-components/Qr/useQrCode.d.ts +15 -0
  25. package/esm/typings/src/book-components/_common/Dropdown/Dropdown.d.ts +15 -0
  26. package/esm/typings/src/book-components/_common/Modal/Modal.d.ts +2 -2
  27. package/esm/typings/src/book-components/_common/Tooltip/Tooltip.d.ts +47 -0
  28. package/esm/typings/src/book-components/_common/react-utils/classNames.d.ts +1 -1
  29. package/esm/typings/src/book-components/icons/AboutIcon.d.ts +9 -0
  30. package/esm/typings/src/book-components/icons/CloseIcon.d.ts +4 -8
  31. package/esm/typings/src/book-components/icons/DownloadIcon.d.ts +9 -0
  32. package/esm/typings/src/book-components/icons/ExitFullscreenIcon.d.ts +7 -0
  33. package/esm/typings/src/book-components/icons/FullscreenIcon.d.ts +7 -0
  34. package/esm/typings/src/book-components/icons/MenuIcon.d.ts +12 -0
  35. package/esm/typings/src/cli/cli-commands/_boilerplate.d.ts +2 -1
  36. package/esm/typings/src/cli/cli-commands/about.d.ts +3 -1
  37. package/esm/typings/src/cli/cli-commands/hello.d.ts +2 -1
  38. package/esm/typings/src/cli/cli-commands/list-models.d.ts +2 -1
  39. package/esm/typings/src/cli/cli-commands/list-scrapers.d.ts +2 -1
  40. package/esm/typings/src/cli/cli-commands/login.d.ts +2 -1
  41. package/esm/typings/src/cli/cli-commands/make.d.ts +2 -1
  42. package/esm/typings/src/cli/cli-commands/prettify.d.ts +2 -1
  43. package/esm/typings/src/cli/cli-commands/run.d.ts +2 -1
  44. package/esm/typings/src/cli/cli-commands/{start-server.d.ts → start-agents-server.d.ts} +3 -2
  45. package/esm/typings/src/cli/cli-commands/start-pipelines-server.d.ts +15 -0
  46. package/esm/typings/src/cli/cli-commands/test-command.d.ts +2 -1
  47. package/esm/typings/src/cli/common/$addGlobalOptionsToCommand.d.ts +2 -1
  48. package/esm/typings/src/collection/agent-collection/AgentCollection.d.ts +36 -0
  49. package/esm/typings/src/collection/agent-collection/constructors/AgentCollectionInDirectory.d.ts +88 -0
  50. package/esm/typings/src/collection/{PipelineCollection.d.ts → pipeline-collection/PipelineCollection.d.ts} +7 -3
  51. package/esm/typings/src/collection/{SimplePipelineCollection.d.ts → pipeline-collection/SimplePipelineCollection.d.ts} +5 -5
  52. package/esm/typings/src/collection/{constructors/createCollectionFromDirectory.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.d.ts} +8 -11
  53. package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromJson.d.ts +13 -0
  54. package/esm/typings/src/collection/{constructors/createCollectionFromPromise.d.ts → pipeline-collection/constructors/createPipelineCollectionFromPromise.d.ts} +6 -5
  55. package/esm/typings/src/collection/{constructors/createCollectionFromUrl.d.ts → pipeline-collection/constructors/createPipelineCollectionFromUrl.d.ts} +3 -3
  56. package/esm/typings/src/collection/{constructors/createSubcollection.d.ts → pipeline-collection/constructors/createPipelineSubcollection.d.ts} +3 -3
  57. package/esm/typings/src/collection/pipeline-collection/pipelineCollectionToJson.d.ts +13 -0
  58. package/esm/typings/src/commands/_common/types/CommandParser.d.ts +4 -5
  59. package/esm/typings/src/config.d.ts +22 -2
  60. package/esm/typings/src/errors/0-index.d.ts +3 -0
  61. package/esm/typings/src/errors/NotAllowed.d.ts +9 -0
  62. package/esm/typings/src/execution/AvailableModel.d.ts +1 -0
  63. package/esm/typings/src/execution/Executables.d.ts +3 -0
  64. package/esm/typings/src/execution/ExecutionTask.d.ts +12 -3
  65. package/esm/typings/src/execution/ExecutionTools.d.ts +5 -0
  66. package/esm/typings/src/execution/FilesystemTools.d.ts +1 -1
  67. package/esm/typings/src/execution/LlmExecutionTools.d.ts +7 -1
  68. package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +5 -0
  69. package/esm/typings/src/execution/createPipelineExecutor/20-executeTask.d.ts +5 -0
  70. package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatSubvalues.d.ts +5 -0
  71. package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +5 -0
  72. package/esm/typings/src/execution/utils/logLlmCall.d.ts +8 -0
  73. package/esm/typings/src/execution/utils/usage-constants.d.ts +4 -124
  74. package/esm/typings/src/high-level-abstractions/_common/HighLevelAbstraction.d.ts +2 -1
  75. package/esm/typings/src/llm-providers/_common/register/$registeredLlmToolsMessage.d.ts +2 -1
  76. package/esm/typings/src/llm-providers/agent/Agent.d.ts +49 -0
  77. package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +9 -4
  78. package/esm/typings/src/llm-providers/agent/AgentOptions.d.ts +17 -0
  79. package/esm/typings/src/llm-providers/agent/CreateAgentLlmExecutionToolsOptions.d.ts +16 -0
  80. package/esm/typings/src/llm-providers/agent/createAgentLlmExecutionTools.d.ts +1 -19
  81. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +28 -0
  82. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionToolsOptions.d.ts +7 -1
  83. package/esm/typings/src/other/templates/getTemplatesPipelineCollection.d.ts +1 -1
  84. package/esm/typings/src/playground/permanent/_boilerplate.d.ts +5 -0
  85. package/esm/typings/src/playground/permanent/agent-with-browser-playground.d.ts +5 -0
  86. package/esm/typings/src/playground/playground.d.ts +0 -3
  87. package/esm/typings/src/playground/playground1.d.ts +2 -0
  88. package/esm/typings/src/remote-server/startRemoteServer.d.ts +4 -1
  89. package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +22 -8
  90. package/esm/typings/src/scrapers/_boilerplate/createBoilerplateScraper.d.ts +1 -12
  91. package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -9
  92. package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +1 -12
  93. package/esm/typings/src/scrapers/document/register-metadata.d.ts +1 -9
  94. package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +1 -12
  95. package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +1 -9
  96. package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +1 -12
  97. package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +1 -9
  98. package/esm/typings/src/scrapers/markitdown/createMarkitdownScraper.d.ts +1 -12
  99. package/esm/typings/src/scrapers/markitdown/register-metadata.d.ts +1 -9
  100. package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +1 -12
  101. package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +1 -9
  102. package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +1 -12
  103. package/esm/typings/src/scrapers/website/register-metadata.d.ts +1 -9
  104. package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +2 -1
  105. package/esm/typings/src/transpilers/_common/BookTranspiler.d.ts +29 -0
  106. package/esm/typings/src/transpilers/_common/BookTranspilerOptions.d.ts +18 -0
  107. package/esm/typings/src/transpilers/_common/register/$bookTranspilersRegister.d.ts +15 -0
  108. package/esm/typings/src/transpilers/formatted-book-in-markdown/FormattedBookInMarkdownTranspiler.d.ts +13 -0
  109. package/esm/typings/src/transpilers/formatted-book-in-markdown/register.d.ts +15 -0
  110. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.d.ts +13 -0
  111. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.test.d.ts +1 -0
  112. package/esm/typings/src/transpilers/openai-sdk/playground/playground.d.ts +5 -0
  113. package/esm/typings/src/transpilers/openai-sdk/register.d.ts +15 -0
  114. package/esm/typings/src/types/LlmCall.d.ts +20 -0
  115. package/esm/typings/src/types/Updatable.d.ts +19 -0
  116. package/esm/typings/src/types/typeAliases.d.ts +1 -1
  117. package/esm/typings/src/utils/execCommand/$execCommand.d.ts +2 -1
  118. package/esm/typings/src/utils/execCommand/$execCommands.d.ts +2 -1
  119. package/esm/typings/src/utils/files/$induceBookDownload.d.ts +13 -0
  120. package/esm/typings/src/utils/files/$induceFileDownload.d.ts +13 -0
  121. package/esm/typings/src/utils/files/ObjectUrl.d.ts +46 -0
  122. package/esm/typings/src/utils/files/listAllFiles.d.ts +2 -3
  123. package/esm/typings/src/utils/misc/aboutPromptbookInformation.d.ts +21 -0
  124. package/esm/typings/src/utils/misc/injectCssModuleIntoShadowRoot.d.ts +1 -0
  125. package/esm/typings/src/utils/misc/xAboutPromptbookInformation.d.ts +13 -0
  126. package/esm/typings/src/utils/organization/$side_effect.d.ts +7 -0
  127. package/esm/typings/src/utils/serialization/$deepFreeze.d.ts +2 -1
  128. package/esm/typings/src/version.d.ts +1 -1
  129. package/esm/typings/src/wizard/$getCompiledBook.d.ts +1 -2
  130. package/package.json +7 -6
  131. package/umd/index.umd.js +169 -12
  132. package/umd/index.umd.js.map +1 -1
  133. package/esm/typings/src/book-components/BookEditor/BookEditorInner.d.ts +0 -5
  134. package/esm/typings/src/book-components/BookEditor/BookEditorWrapper.d.ts +0 -9
  135. package/esm/typings/src/book-components/BookEditor/config.d.ts +0 -10
  136. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +0 -21
  137. package/esm/typings/src/collection/collectionToJson.d.ts +0 -13
  138. package/esm/typings/src/collection/constructors/createCollectionFromJson.d.ts +0 -13
  139. /package/esm/typings/src/{book-components/Chat/utils/renderMarkdown.test.d.ts → collection/agent-collection/constructors/AgentCollectionInDirectory.test.d.ts} +0 -0
  140. /package/esm/typings/src/collection/{constructors/createCollectionFromDirectory.test.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.test.d.ts} +0 -0
  141. /package/esm/typings/src/collection/{constructors/createCollectionFromJson.test.d.ts → pipeline-collection/constructors/createPipelineCollectionFromJson.test.d.ts} +0 -0
  142. /package/esm/typings/src/collection/{constructors/createCollectionFromPromise.test.d.ts → pipeline-collection/constructors/createPipelineCollectionFromPromise.test.d.ts} +0 -0
  143. /package/esm/typings/src/collection/{collectionToJson.test.d.ts → pipeline-collection/pipelineCollectionToJson.test.d.ts} +0 -0
@@ -0,0 +1,20 @@
1
+ import type { ExecutionPromptReportJson } from '../execution/execution-report/ExecutionPromptReportJson';
2
+ import type { string_model_name } from './typeAliases';
3
+ /**
4
+ * Represents a single LLM call with its report.
5
+ *
6
+ * @see https://github.com/webgptorg/promptbook/issues/24
7
+ */
8
+ export type LlmCall = {
9
+ /**
10
+ * The name of the model used for the call.
11
+ */
12
+ readonly modelName: string_model_name;
13
+ /**
14
+ * The report of the LLM execution.
15
+ */
16
+ readonly report: ExecutionPromptReportJson;
17
+ };
18
+ /**
19
+ * TODO: !!! Maybe different shape of LlmCall
20
+ */
@@ -0,0 +1,19 @@
1
+ import { BehaviorSubject } from 'rxjs';
2
+ /**
3
+ * A type that represents a value that can be updated over time:
4
+ *
5
+ * 1) It can be a static value of type `TValue`
6
+ * 2) Or a `BehaviorSubject` that emits values of type `TValue`
7
+ * 3) Or pair of `[getValue, setValue]` functions for getting and setting the value
8
+ */
9
+ export type Updatable<TValue> = TValue | BehaviorSubject<TValue> | [TValue, (value: TValue) => void];
10
+ /**
11
+ * Restricts an Updatable to a (2) BehaviorSubject variant
12
+ *
13
+ * @see Updatable
14
+ * @private internal utility <- TODO: [🧠] Maybe export from `@promptbook/types`
15
+ */
16
+ export declare function asUpdatableSubject<TValue>(value: Updatable<TValue>): BehaviorSubject<TValue>;
17
+ /**
18
+ * TODO: [🧠] Maybe `BehaviorSubject` is too heavy for this use case, maybe just tuple `[value,setValue]` is enough
19
+ */
@@ -323,7 +323,7 @@ export type string_css_property = string;
323
323
  *
324
324
  * For example `13px`
325
325
  */
326
- export type string_css_value = string;
326
+ export type string_css_value = string | number;
327
327
  /**
328
328
  * Semantic helper
329
329
  *
@@ -1,3 +1,4 @@
1
+ import { $side_effect } from '../organization/$side_effect';
1
2
  import type { ExecCommandOptions } from './ExecCommandOptions';
2
3
  /**
3
4
  * Run one command in a shell
@@ -10,7 +11,7 @@ import type { ExecCommandOptions } from './ExecCommandOptions';
10
11
  *
11
12
  * @public exported from `@promptbook/node`
12
13
  */
13
- export declare function $execCommand(options: ExecCommandOptions): Promise<string>;
14
+ export declare function $execCommand(options: ExecCommandOptions): Promise<$side_effect & string>;
14
15
  /**
15
16
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
16
17
  */
@@ -1,3 +1,4 @@
1
+ import { $side_effect } from '../organization/$side_effect';
1
2
  /**
2
3
  * Run multiple commands in a shell in sequence
3
4
  *
@@ -8,7 +9,7 @@
8
9
  *
9
10
  * @public exported from `@promptbook/node`
10
11
  */
11
- export declare function $execCommands({ commands, cwd, crashOnError, }: {
12
+ export declare function $execCommands({ commands, cwd, crashOnError, }: $side_effect & {
12
13
  readonly commands: string[];
13
14
  readonly cwd: string;
14
15
  readonly crashOnError?: boolean;
@@ -0,0 +1,13 @@
1
+ import { string_book } from '../../_packages/types.index';
2
+ import { $side_effect } from '../organization/$side_effect';
3
+ /**
4
+ * Download a Book in a browser
5
+ *
6
+ * Note: `$` is used to indicate that this function is not a pure function - its purpose is to cause a side effect (download a file)
7
+ *
8
+ * @public exported from `@promptbook/browser`
9
+ */
10
+ export declare function $induceBookDownload(book: string_book): Promise<$side_effect>;
11
+ /**
12
+ * Note: [🔵] Code in this file should never be published outside of `@promptbook/browser`
13
+ */
@@ -0,0 +1,13 @@
1
+ import { string_url } from '../../types/typeAliases';
2
+ import { $side_effect } from '../organization/$side_effect';
3
+ /**
4
+ * Download a File in a browser
5
+ *
6
+ * Note: `$` is used to indicate that this function is not a pure function - its purpose is to cause a side effect (download a file)
7
+ *
8
+ * @public exported from `@promptbook/browser`
9
+ */
10
+ export declare function $induceFileDownload(fileOrBlobOrUrl: File | Blob | URL | string_url): Promise<$side_effect>;
11
+ /**
12
+ * Note: [🔵] Code in this file should never be published outside of `@promptbook/browser`
13
+ */
@@ -0,0 +1,46 @@
1
+ import { IDestroyable, Registration } from 'destroyable';
2
+ import { string_mime_type, string_url } from '../../types/typeAliases';
3
+ /**
4
+ * Converts Blob, File or MediaSource to url using URL.createObjectURL
5
+ *
6
+ * @public exported from `@promptbook/browser`
7
+ */
8
+ export declare class ObjectUrl extends Registration implements IDestroyable {
9
+ readonly src: string_url;
10
+ private constructor();
11
+ /**
12
+ * Creates ObjectUrl from multiple input types
13
+ * Note: DO NOT forget to call destroy() when you are done with it
14
+ */
15
+ static from(source: Blob | File | MediaSource | string, mimeType: string_mime_type): ObjectUrl;
16
+ /**
17
+ * Creates ObjectUrl from string
18
+ * Note: DO NOT forget to call destroy() when you are done with it
19
+ */
20
+ static fromString(source: string, mimeType: string_mime_type): ObjectUrl;
21
+ /**
22
+ * Creates ObjectUrl
23
+ * DO NOT forget to call destroy() when you are done with it
24
+ */
25
+ static fromBlob(source: Blob | File | MediaSource): ObjectUrl;
26
+ /**
27
+ * Creates ObjectUrl:
28
+ * 1) With functionality for Blobs, Files or MediaSources
29
+ * 2) Just a wrapper for string urls
30
+ *
31
+ * DO NOT forget to call destroy() when you are done with it
32
+ */
33
+ static fromBlobOrUrl(source: Blob | File | MediaSource | URL | string_url): ObjectUrl;
34
+ /**
35
+ * Gets object url as string
36
+ * @alias src
37
+ */
38
+ get href(): string_url;
39
+ /**
40
+ * Gets object url as URL object
41
+ */
42
+ get url(): URL;
43
+ }
44
+ /**
45
+ * Note: [🔵] Code in this file should never be published outside of `@promptbook/browser`
46
+ */
@@ -1,13 +1,12 @@
1
1
  import type { FilesystemTools } from '../../execution/FilesystemTools';
2
- import type { string_dirname } from '../../types/typeAliases';
3
- import type { string_filename } from '../../types/typeAliases';
2
+ import type { string_dirname, string_filename } from '../../types/typeAliases';
4
3
  /**
5
4
  * Reads all files in the directory
6
5
  *
7
6
  * @param path
8
7
  * @param isRecursive
9
8
  * @returns List of all files in the directory
10
- * @private internal function of `createCollectionFromDirectory`
9
+ * @private internal function of `AgentCollectionInDirectory` and `createPipelineCollectionFromDirectory`
11
10
  */
12
11
  export declare function listAllFiles(path: string_dirname, isRecursive: boolean, fs: FilesystemTools): Promise<Array<string_filename>>;
13
12
  /**
@@ -0,0 +1,21 @@
1
+ import type { string_markdown } from '../../types/typeAliases';
2
+ export type AboutPromptbookInformationOptions = {
3
+ /**
4
+ * Include information about available servers
5
+ *
6
+ * @default true
7
+ */
8
+ isServersInfoIncluded?: boolean;
9
+ };
10
+ /**
11
+ * Provide information about Promptbook, engine version, book language version, servers, ...
12
+ *
13
+ * @param options Which information to include
14
+ * @returns Information about Promptbook in markdown format
15
+ *
16
+ * @public exported from `@promptbook/core`
17
+ */
18
+ export declare function aboutPromptbookInformation(options?: AboutPromptbookInformationOptions): string_markdown;
19
+ /**
20
+ * TODO: [🗽] Unite branding and make single place for it
21
+ */
@@ -16,5 +16,6 @@ export type InjectCssModuleIntoShadowRootOptions = {
16
16
  *
17
17
  * @public exported from `@promptbook/components`
18
18
  * <- TODO: [🧠] Make `@promptbook/components-utils`
19
+ * @deprecated This was used for BookEditor shadow DOM support, which is no longer needed
19
20
  */
20
21
  export declare function injectCssModuleIntoShadowRoot(options: InjectCssModuleIntoShadowRootOptions): void;
@@ -0,0 +1,13 @@
1
+ import type { AboutPromptbookInformationOptions } from './aboutPromptbookInformation';
2
+ type AboutPromptbookInformationProps = AboutPromptbookInformationOptions;
3
+ /**
4
+ * Provide information about Promptbook, engine version, book language version, servers, ...
5
+ *
6
+ * @public exported from `@promptbook/components`
7
+ */
8
+ export declare function AboutPromptbookInformation(props: AboutPromptbookInformationProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ /**
11
+ * TODO: !!! Remove "x" from filename
12
+ * TODO: [🗽] Unite branding and make single place for it
13
+ */
@@ -0,0 +1,7 @@
1
+ import { really_any } from './really_any';
2
+ /**
3
+ * Organizational helper to mark a function that produces side effects
4
+ *
5
+ * @private within the repository
6
+ */
7
+ export type $side_effect = void | really_any;
@@ -1,4 +1,5 @@
1
1
  import type { ReadonlyDeep } from 'type-fest';
2
+ import { $side_effect } from '../organization/$side_effect';
2
3
  /**
3
4
  * Freezes the given object and all its nested objects recursively
4
5
  *
@@ -8,7 +9,7 @@ import type { ReadonlyDeep } from 'type-fest';
8
9
  * @returns The same object as the input, but deeply frozen
9
10
  * @public exported from `@promptbook/utils`
10
11
  */
11
- export declare function $deepFreeze<TObject>(objectValue: TObject): ReadonlyDeep<TObject>;
12
+ export declare function $deepFreeze<TObject>(objectValue: TObject): ReadonlyDeep<$side_effect & TObject>;
12
13
  /**
13
14
  * TODO: [🧠] Is there a way how to meaningfully test this utility
14
15
  */
@@ -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.103.0-3`).
18
+ * It follows semantic versioning (e.g., `0.103.0-39`).
19
19
  *
20
20
  * @generated
21
21
  */
@@ -2,8 +2,7 @@ import type { ExecutionTools } from '../execution/ExecutionTools';
2
2
  import type { PipelineJson } from '../pipeline/PipelineJson/PipelineJson';
3
3
  import type { PipelineString } from '../pipeline/PipelineString';
4
4
  import type { PrepareAndScrapeOptions } from '../prepare/PrepareAndScrapeOptions';
5
- import type { string_filename } from '../types/typeAliases';
6
- import type { string_pipeline_url } from '../types/typeAliases';
5
+ import type { string_filename, string_pipeline_url } from '../types/typeAliases';
7
6
  /**
8
7
  * @see ./wizard.ts `getPipeline` method
9
8
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/openai",
3
- "version": "0.103.0-4",
3
+ "version": "0.103.0-40",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -102,14 +102,15 @@
102
102
  "module": "./esm/index.es.js",
103
103
  "typings": "./esm/typings/src/_packages/openai.index.d.ts",
104
104
  "peerDependencies": {
105
- "@promptbook/core": "0.103.0-4"
105
+ "@promptbook/core": "0.103.0-40"
106
106
  },
107
107
  "dependencies": {
108
- "bottleneck": "^2.19.5",
109
- "colors": "1.4.0",
108
+ "bottleneck": "2.19.5",
109
+ "colors": "^1.4.0",
110
110
  "crypto": "1.0.1",
111
111
  "openai": "4.63.0",
112
- "socket.io-client": "4.7.2",
113
- "spacetrim": "0.11.59"
112
+ "socket.io-client": "4.7.5",
113
+ "spacetrim": "0.11.60",
114
+ "waitasecond": "1.11.160"
114
115
  }
115
116
  }
package/umd/index.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('colors'), require('spacetrim'), require('crypto'), require('bottleneck'), require('openai'), require('socket.io-client')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'colors', 'spacetrim', 'crypto', 'bottleneck', 'openai', 'socket.io-client'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-openai"] = {}, global.colors, global.spaceTrim, global.crypto, global.Bottleneck, global.OpenAI, global.socket_ioClient));
5
- })(this, (function (exports, colors, spaceTrim, crypto, Bottleneck, OpenAI, socket_ioClient) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('colors'), require('waitasecond'), require('spacetrim'), require('crypto'), require('bottleneck'), require('openai'), require('socket.io-client')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'colors', 'waitasecond', 'spacetrim', 'crypto', 'bottleneck', 'openai', 'socket.io-client'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-openai"] = {}, global.colors, global.waitasecond, global.spaceTrim, global.crypto, global.Bottleneck, global.OpenAI, global.socket_ioClient));
5
+ })(this, (function (exports, colors, waitasecond, spaceTrim, crypto, Bottleneck, OpenAI, socket_ioClient) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -25,7 +25,7 @@
25
25
  * @generated
26
26
  * @see https://github.com/webgptorg/promptbook
27
27
  */
28
- const PROMPTBOOK_ENGINE_VERSION = '0.103.0-4';
28
+ const PROMPTBOOK_ENGINE_VERSION = '0.103.0-40';
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
@@ -71,6 +71,19 @@
71
71
  * TODO: [🎺]
72
72
  */
73
73
 
74
+ /**
75
+ * This error indicates that promptbook operation is not allowed
76
+ *
77
+ * @public exported from `@promptbook/core`
78
+ */
79
+ class NotAllowed extends Error {
80
+ constructor(message) {
81
+ super(message);
82
+ this.name = 'NotAllowed';
83
+ Object.setPrototypeOf(this, NotAllowed.prototype);
84
+ }
85
+ }
86
+
74
87
  /**
75
88
  * This error type indicates that some part of the code is not implemented yet
76
89
  *
@@ -1153,15 +1166,30 @@
1153
1166
  * @public exported from `@promptbook/core`
1154
1167
  */
1155
1168
  const PROMPTBOOK_COLOR = Color.fromHex('#79EAFD');
1156
- // <- TODO: [🧠] Using `Color` here increases the package size approx 3kb, maybe remove it
1169
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
1170
+ /**
1171
+ * Colors for syntax highlighting in the `<BookEditor/>`
1172
+ *
1173
+ * TODO: [🗽] Unite branding and make single place for it
1174
+ *
1175
+ * @public exported from `@promptbook/core`
1176
+ */
1177
+ ({
1178
+ TITLE: Color.fromHex('#244EA8'),
1179
+ LINE: Color.fromHex('#eeeeee'),
1180
+ COMMITMENT: Color.fromHex('#DA0F78'),
1181
+ PARAMETER: Color.fromHex('#8e44ad'),
1182
+ });
1183
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
1157
1184
  /**
1158
- * Dark color of the Promptbook
1185
+ * Chat color of the Promptbook (in chat)
1159
1186
  *
1160
1187
  * TODO: [🗽] Unite branding and make single place for it
1161
1188
  *
1162
1189
  * @public exported from `@promptbook/core`
1163
1190
  */
1164
1191
  PROMPTBOOK_COLOR.then(lighten(0.1)).then(saturate(0.9)).then(grayscale(0.9));
1192
+ // <- TODO: [🧠][🈵] Using `Color` and `lighten`, `saturate`,... here increases the package size approx 3kb, maybe remove it
1165
1193
  /**
1166
1194
  * Color of the user (in chat)
1167
1195
  *
@@ -1831,10 +1859,13 @@
1831
1859
  * @public exported from `@promptbook/utils`
1832
1860
  */
1833
1861
  function countLines(text) {
1862
+ if (text === '') {
1863
+ return 0;
1864
+ }
1834
1865
  text = text.replace('\r\n', '\n');
1835
1866
  text = text.replace('\r', '\n');
1836
1867
  const lines = text.split('\n');
1837
- return lines.reduce((count, line) => count + Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 0);
1868
+ return lines.reduce((count, line) => count + Math.max(Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 1), 0);
1838
1869
  }
1839
1870
  /**
1840
1871
  * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
@@ -3601,6 +3632,12 @@
3601
3632
  *
3602
3633
  * This is useful for calling OpenAI API with a single assistant, for more wide usage use `OpenAiExecutionTools`.
3603
3634
  *
3635
+ * Note: [🦖] There are several different things in Promptbook:
3636
+ * - `Agent` - which represents an AI Agent with its source, memories, actions, etc. Agent is a higher-level abstraction which is internally using:
3637
+ * - `LlmExecutionTools` - which wraps one or more LLM models and provides an interface to execute them
3638
+ * - `AgentLlmExecutionTools` - which is a specific implementation of `LlmExecutionTools` that wraps another LlmExecutionTools and applies agent-specific system prompts and requirements
3639
+ * - `OpenAiAssistantExecutionTools` - which is a specific implementation of `LlmExecutionTools` for OpenAI models with assistant capabilities, recommended for usage in `Agent` or `AgentLlmExecutionTools`
3640
+ *
3604
3641
  * @public exported from `@promptbook/openai`
3605
3642
  */
3606
3643
  class OpenAiAssistantExecutionTools extends OpenAiExecutionTools {
@@ -3610,11 +3647,18 @@
3610
3647
  * @param options which are relevant are directly passed to the OpenAI client
3611
3648
  */
3612
3649
  constructor(options) {
3650
+ var _a;
3613
3651
  if (options.isProxied) {
3614
3652
  throw new NotYetImplementedError(`Proxy mode is not yet implemented for OpenAI assistants`);
3615
3653
  }
3616
3654
  super(options);
3655
+ this.isCreatingNewAssistantsAllowed = false;
3617
3656
  this.assistantId = options.assistantId;
3657
+ this.isCreatingNewAssistantsAllowed = (_a = options.isCreatingNewAssistantsAllowed) !== null && _a !== void 0 ? _a : false;
3658
+ if (this.assistantId === null && !this.isCreatingNewAssistantsAllowed) {
3659
+ throw new NotAllowed(`Assistant ID is null and creating new assistants is not allowed - this configuration does not make sense`);
3660
+ }
3661
+ // <- TODO: !!! `OpenAiAssistantExecutionToolsOptions` - Allow `assistantId: null` together with `isCreatingNewAssistantsAllowed: true`
3618
3662
  // TODO: [👱] Make limiter same as in `OpenAiExecutionTools`
3619
3663
  }
3620
3664
  get title() {
@@ -3673,14 +3717,13 @@
3673
3717
  // TODO: [👨‍👨‍👧‍👧][🧠] What about system message for assistants, does it make sense - combination of OpenAI assistants with Promptbook Personas
3674
3718
  assistant_id: this.assistantId,
3675
3719
  thread: {
3676
- messages: 'thread' in prompt && Array.isArray(prompt.thread)
3720
+ messages: 'thread' in prompt &&
3721
+ Array.isArray(prompt.thread)
3677
3722
  ? prompt.thread.map((msg) => ({
3678
3723
  role: msg.role === 'assistant' ? 'assistant' : 'user',
3679
3724
  content: msg.content,
3680
3725
  }))
3681
- : [
3682
- { role: 'user', content: rawPromptContent },
3683
- ],
3726
+ : [{ role: 'user', content: rawPromptContent }],
3684
3727
  },
3685
3728
  // <- TODO: Add user identification here> user: this.options.user,
3686
3729
  };
@@ -3760,7 +3803,120 @@
3760
3803
  },
3761
3804
  });
3762
3805
  }
3806
+ async playground() {
3807
+ const client = await this.getClient();
3808
+ // List all assistants
3809
+ const assistants = await client.beta.assistants.list();
3810
+ console.log('!!! Assistants:', assistants);
3811
+ // Get details of a specific assistant
3812
+ const assistantId = 'asst_MO8fhZf4dGloCfXSHeLcIik0';
3813
+ const assistant = await client.beta.assistants.retrieve(assistantId);
3814
+ console.log('!!! Assistant Details:', assistant);
3815
+ // Update an assistant
3816
+ const updatedAssistant = await client.beta.assistants.update(assistantId, {
3817
+ name: assistant.name + '(M)',
3818
+ description: 'Updated description via Promptbook',
3819
+ metadata: {
3820
+ [Math.random().toString(36).substring(2, 15)]: new Date().toISOString(),
3821
+ },
3822
+ });
3823
+ console.log('!!! Updated Assistant:', updatedAssistant);
3824
+ await waitasecond.forEver();
3825
+ }
3826
+ async createNewAssistant(options) {
3827
+ if (!this.isCreatingNewAssistantsAllowed) {
3828
+ throw new NotAllowed(`Creating new assistants is not allowed. Set \`isCreatingNewAssistantsAllowed: true\` in options to enable this feature.`);
3829
+ }
3830
+ await this.playground();
3831
+ const { name, instructions } = options;
3832
+ const client = await this.getClient();
3833
+ /*
3834
+ TODO: !!!
3835
+ async function downloadFile(url: string, folder = './tmp'): Promise<string> {
3836
+ const filename = path.basename(url.split('?')[0]);
3837
+ const filepath = path.join(folder, filename);
3838
+
3839
+ if (!fs.existsSync(folder)) fs.mkdirSync(folder);
3840
+
3841
+ const res = await fetch(url);
3842
+ if (!res.ok) throw new Error(`Download error: ${url}`);
3843
+ const buffer = await res.arrayBuffer();
3844
+ fs.writeFileSync(filepath, Buffer.from(buffer));
3845
+ console.log(`📥 File downloaded: ${filename}`);
3846
+
3847
+ return filepath;
3848
+ }
3849
+
3850
+ async function uploadFileToOpenAI(filepath: string) {
3851
+ const file = await client.files.create({
3852
+ file: fs.createReadStream(filepath),
3853
+ purpose: 'assistants',
3854
+ });
3855
+ console.log(`⬆️ File uploaded to OpenAI: ${file.filename} (${file.id})`);
3856
+ return file;
3857
+ }
3858
+
3859
+ // 🌐 URL addresses of files to upload
3860
+ const fileUrls = [
3861
+ 'https://raw.githubusercontent.com/vercel/next.js/canary/packages/next/README.md',
3862
+ 'https://raw.githubusercontent.com/openai/openai-cookbook/main/examples/How_to_call_the_Assistants_API_with_Node.js.ipynb',
3863
+ ];
3864
+
3865
+ // 1️⃣ Download files from URL
3866
+ const localFiles = [];
3867
+ for (const url of fileUrls) {
3868
+ const filepath = await downloadFile(url);
3869
+ localFiles.push(filepath);
3870
+ }
3871
+
3872
+ // 2️⃣ Upload files to OpenAI
3873
+ const uploadedFiles = [];
3874
+ for (const filepath of localFiles) {
3875
+ const file = await uploadFileToOpenAI(filepath);
3876
+ uploadedFiles.push(file.id);
3877
+ }
3878
+ */
3879
+ alert('!!!! Creating new OpenAI assistant');
3880
+ // 3️⃣ Create assistant with uploaded files
3881
+ const assistant = await client.beta.assistants.create({
3882
+ name,
3883
+ description: 'Assistant created via Promptbook',
3884
+ model: 'gpt-4o',
3885
+ instructions,
3886
+ tools: [/* TODO: [🧠] Maybe add { type: 'code_interpreter' }, */ { type: 'file_search' }],
3887
+ // !!!! file_ids: uploadedFiles,
3888
+ });
3889
+ console.log(`✅ Assistant created: ${assistant.id}`);
3890
+ // TODO: !!!! Try listing existing assistants
3891
+ // TODO: !!!! Try marking existing assistants by DISCRIMINANT
3892
+ // TODO: !!!! Allow to update and reconnect to existing assistants
3893
+ return new OpenAiAssistantExecutionTools({
3894
+ ...this.options,
3895
+ isCreatingNewAssistantsAllowed: false,
3896
+ assistantId: assistant.id,
3897
+ });
3898
+ }
3899
+ /**
3900
+ * Discriminant for type guards
3901
+ */
3902
+ get discriminant() {
3903
+ return DISCRIMINANT;
3904
+ }
3905
+ /**
3906
+ * Type guard to check if given `LlmExecutionTools` are instanceof `OpenAiAssistantExecutionTools`
3907
+ *
3908
+ * Note: This is useful when you can possibly have multiple versions of `@promptbook/openai` installed
3909
+ */
3910
+ static isOpenAiAssistantExecutionTools(llmExecutionTools) {
3911
+ return llmExecutionTools.discriminant === DISCRIMINANT;
3912
+ }
3763
3913
  }
3914
+ /**
3915
+ * Discriminant for type guards
3916
+ *
3917
+ * @private const of `OpenAiAssistantExecutionTools`
3918
+ */
3919
+ const DISCRIMINANT = 'OPEN_AI_ASSISTANT_V1';
3764
3920
  /**
3765
3921
  * TODO: [🧠][🧙‍♂️] Maybe there can be some wizard for those who want to use just OpenAI
3766
3922
  * TODO: Maybe make custom OpenAiError
@@ -3996,6 +4152,7 @@
3996
4152
  PromptbookFetchError,
3997
4153
  UnexpectedError,
3998
4154
  WrappedError,
4155
+ NotAllowed,
3999
4156
  // TODO: [🪑]> VersionMismatchError,
4000
4157
  };
4001
4158
  /**