@promptbook/openai 0.102.0-4 → 0.102.0-6

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 (98) hide show
  1. package/esm/index.es.js +101 -22
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/typings/books/index.d.ts +81 -0
  4. package/esm/typings/src/_packages/components.index.d.ts +2 -0
  5. package/esm/typings/src/_packages/markdown-utils.index.d.ts +4 -0
  6. package/esm/typings/src/_packages/types.index.d.ts +8 -6
  7. package/esm/typings/src/_packages/utils.index.d.ts +12 -14
  8. package/esm/typings/src/book-2.0/agent-source/createAgentModelRequirements.d.ts +1 -1
  9. package/esm/typings/src/book-2.0/utils/generateGravatarUrl.d.ts +1 -1
  10. package/esm/typings/src/book-2.0/utils/generatePlaceholderAgentProfileImageUrl.d.ts +1 -1
  11. package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +1 -1
  12. package/esm/typings/src/book-components/BookEditor/BookEditorInner.d.ts +1 -1
  13. package/esm/typings/src/book-components/Chat/Chat/Chat.d.ts +1 -5
  14. package/esm/typings/src/book-components/Chat/Chat/ChatMessageItem.d.ts +27 -0
  15. package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +13 -6
  16. package/esm/typings/src/book-components/Chat/Chat/constants.d.ts +7 -0
  17. package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +1 -1
  18. package/esm/typings/src/book-components/Chat/MockedChat/MockedChat.d.ts +1 -1
  19. package/esm/typings/src/book-components/Chat/MockedChat/constants.d.ts +1 -1
  20. package/esm/typings/src/book-components/Chat/save/_common/ChatSaveFormatDefinition.d.ts +1 -1
  21. package/esm/typings/src/book-components/Chat/save/_common/getChatSaveFormatDefinitions.d.ts +2 -2
  22. package/esm/typings/src/book-components/Chat/save/_common/string_chat_format_name.d.ts +1 -1
  23. package/esm/typings/src/execution/LlmExecutionToolsConstructor.d.ts +1 -1
  24. package/esm/typings/src/execution/execution-report/countWorkingDuration.d.ts +1 -1
  25. package/esm/typings/src/llm-providers/_common/register/$llmToolsMetadataRegister.d.ts +1 -1
  26. package/esm/typings/src/llm-providers/_common/register/$llmToolsRegister.d.ts +1 -1
  27. package/esm/typings/src/llm-providers/_common/register/$registeredLlmToolsMessage.d.ts +1 -2
  28. package/esm/typings/src/llm-providers/_common/register/LlmToolsConfiguration.d.ts +1 -1
  29. package/esm/typings/src/llm-providers/_common/register/LlmToolsMetadata.d.ts +1 -1
  30. package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +1 -1
  31. package/esm/typings/src/llm-providers/agent/register-configuration.d.ts +1 -1
  32. package/esm/typings/src/llm-providers/agent/register-constructor.d.ts +1 -1
  33. package/esm/typings/src/llm-providers/anthropic-claude/register-configuration.d.ts +1 -1
  34. package/esm/typings/src/llm-providers/anthropic-claude/register-constructor.d.ts +1 -1
  35. package/esm/typings/src/llm-providers/azure-openai/register-configuration.d.ts +1 -1
  36. package/esm/typings/src/llm-providers/azure-openai/register-constructor.d.ts +1 -1
  37. package/esm/typings/src/llm-providers/deepseek/register-configuration.d.ts +1 -1
  38. package/esm/typings/src/llm-providers/deepseek/register-constructor.d.ts +1 -1
  39. package/esm/typings/src/llm-providers/google/register-configuration.d.ts +1 -1
  40. package/esm/typings/src/llm-providers/google/register-constructor.d.ts +1 -1
  41. package/esm/typings/src/llm-providers/ollama/register-configuration.d.ts +1 -1
  42. package/esm/typings/src/llm-providers/ollama/register-constructor.d.ts +1 -1
  43. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +1 -3
  44. package/esm/typings/src/llm-providers/openai/OpenAiCompatibleExecutionTools.d.ts +5 -1
  45. package/esm/typings/src/llm-providers/openai/register-configuration.d.ts +1 -1
  46. package/esm/typings/src/llm-providers/openai/register-constructor.d.ts +1 -1
  47. package/esm/typings/src/scrapers/_boilerplate/register-constructor.d.ts +1 -1
  48. package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -1
  49. package/esm/typings/src/scrapers/_common/register/$scrapersMetadataRegister.d.ts +1 -1
  50. package/esm/typings/src/scrapers/_common/register/$scrapersRegister.d.ts +1 -1
  51. package/esm/typings/src/scrapers/_common/register/ScraperAndConverterMetadata.d.ts +2 -4
  52. package/esm/typings/src/scrapers/_common/register/ScraperConstructor.d.ts +1 -1
  53. package/esm/typings/src/scrapers/document/register-constructor.d.ts +1 -1
  54. package/esm/typings/src/scrapers/document/register-metadata.d.ts +1 -1
  55. package/esm/typings/src/scrapers/document-legacy/register-constructor.d.ts +1 -1
  56. package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +1 -1
  57. package/esm/typings/src/scrapers/markdown/register-constructor.d.ts +1 -1
  58. package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +1 -1
  59. package/esm/typings/src/scrapers/markitdown/register-constructor.d.ts +1 -1
  60. package/esm/typings/src/scrapers/markitdown/register-metadata.d.ts +1 -1
  61. package/esm/typings/src/scrapers/pdf/register-constructor.d.ts +1 -1
  62. package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +1 -1
  63. package/esm/typings/src/scrapers/website/register-constructor.d.ts +1 -1
  64. package/esm/typings/src/scrapers/website/register-metadata.d.ts +1 -1
  65. package/esm/typings/src/scripting/javascript/postprocessing-functions.d.ts +6 -6
  66. package/esm/typings/src/types/Prompt.d.ts +5 -0
  67. package/esm/typings/src/utils/markdown/createMarkdownChart.d.ts +1 -1
  68. package/esm/typings/src/utils/markdown/humanizeAiText.d.ts +1 -1
  69. package/esm/typings/src/utils/markdown/humanizeAiTextEllipsis.d.ts +1 -1
  70. package/esm/typings/src/utils/markdown/humanizeAiTextEmdashed.d.ts +1 -1
  71. package/esm/typings/src/utils/markdown/humanizeAiTextQuotes.d.ts +1 -1
  72. package/esm/typings/src/utils/markdown/humanizeAiTextWhitespace.d.ts +1 -1
  73. package/esm/typings/src/utils/markdown/promptbookifyAiText.d.ts +1 -1
  74. package/esm/typings/src/utils/{trimCodeBlock.d.ts → markdown/trimCodeBlock.d.ts} +1 -1
  75. package/esm/typings/src/utils/{trimEndOfCodeBlock.d.ts → markdown/trimEndOfCodeBlock.d.ts} +1 -1
  76. package/esm/typings/src/utils/{$Register.d.ts → misc/$Register.d.ts} +2 -2
  77. package/esm/typings/src/utils/{$getCurrentDate.d.ts → misc/$getCurrentDate.d.ts} +1 -1
  78. package/esm/typings/src/utils/{arrayableToArray.d.ts → misc/arrayableToArray.d.ts} +1 -1
  79. package/esm/typings/src/utils/misc/debounce.d.ts +5 -0
  80. package/esm/typings/src/utils/{emojis.d.ts → misc/emojis.d.ts} +1 -1
  81. package/esm/typings/src/utils/misc/injectCssModuleIntoShadowRoot.d.ts +20 -0
  82. package/esm/typings/src/version.d.ts +1 -1
  83. package/package.json +2 -2
  84. package/umd/index.umd.js +101 -22
  85. package/umd/index.umd.js.map +1 -1
  86. package/esm/typings/src/book-components/BookEditor/injectCssModuleIntoShadowRoot.d.ts +0 -11
  87. /package/esm/typings/src/utils/{trimCodeBlock.test.d.ts → markdown/trimCodeBlock.test.d.ts} +0 -0
  88. /package/esm/typings/src/utils/{trimEndOfCodeBlock.test.d.ts → markdown/trimEndOfCodeBlock.test.d.ts} +0 -0
  89. /package/esm/typings/src/utils/{FromtoItems.d.ts → misc/FromtoItems.d.ts} +0 -0
  90. /package/esm/typings/src/utils/{arrayableToArray.test.d.ts → misc/arrayableToArray.test.d.ts} +0 -0
  91. /package/esm/typings/src/utils/{parseNumber.d.ts → misc/parseNumber.d.ts} +0 -0
  92. /package/esm/typings/src/utils/{parseNumber.test.d.ts → misc/parseNumber.test.d.ts} +0 -0
  93. /package/esm/typings/src/utils/{removeEmojis.d.ts → normalization/removeEmojis.d.ts} +0 -0
  94. /package/esm/typings/src/utils/{removeEmojis.test.d.ts → normalization/removeEmojis.test.d.ts} +0 -0
  95. /package/esm/typings/src/utils/{removeQuotes.d.ts → normalization/removeQuotes.d.ts} +0 -0
  96. /package/esm/typings/src/utils/{removeQuotes.test.d.ts → normalization/removeQuotes.test.d.ts} +0 -0
  97. /package/esm/typings/src/utils/{unwrapResult.d.ts → normalization/unwrapResult.d.ts} +0 -0
  98. /package/esm/typings/src/utils/{unwrapResult.test.d.ts → normalization/unwrapResult.test.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Registration of LLM provider
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Registration of known scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Metadata of the scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import { $Register } from '../../../utils/$Register';
1
+ import { $Register } from '../../../utils/misc/$Register';
2
2
  import type { ScraperAndConverterMetadata } from './ScraperAndConverterMetadata';
3
3
  /**
4
4
  * Global registry for storing metadata about all available scrapers and converters.
@@ -1,4 +1,4 @@
1
- import { $Register } from '../../../utils/$Register';
1
+ import { $Register } from '../../../utils/misc/$Register';
2
2
  import type { ScraperConstructor } from './ScraperConstructor';
3
3
  /**
4
4
  * Registry for all available scrapers in the system.
@@ -1,8 +1,6 @@
1
1
  import type { Executables } from '../../../execution/Executables';
2
- import type { string_mime_type } from '../../../types/typeAliases';
3
- import type { string_promptbook_documentation_url } from '../../../types/typeAliases';
4
- import type { string_title } from '../../../types/typeAliases';
5
- import type { Registered } from '../../../utils/$Register';
2
+ import type { string_mime_type, string_promptbook_documentation_url, string_title } from '../../../types/typeAliases';
3
+ import type { Registered } from '../../../utils/misc/$Register';
6
4
  /**
7
5
  * Metadata interface for scrapers and converters in the system.
8
6
  * Contains information about the capabilities and requirements of a scraper or converter.
@@ -1,6 +1,6 @@
1
1
  import type { ExecutionTools } from '../../../execution/ExecutionTools';
2
2
  import type { PrepareAndScrapeOptions } from '../../../prepare/PrepareAndScrapeOptions';
3
- import type { Registered } from '../../../utils/$Register';
3
+ import type { Registered } from '../../../utils/misc/$Register';
4
4
  import type { Scraper } from '../Scraper';
5
5
  import type { ScraperAndConverterMetadata } from './ScraperAndConverterMetadata';
6
6
  /**
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Registration of known scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Metadata of the scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Registration of known scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Metadata of the scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Registration of known scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Metadata of the scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Registration of known scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Metadata of the scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Registration of known scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Metadata of the scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Registration of known scraper
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Registration } from '../../utils/$Register';
1
+ import type { Registration } from '../../utils/misc/$Register';
2
2
  /**
3
3
  * Metadata of the scraper
4
4
  *
@@ -1,22 +1,22 @@
1
1
  import spaceTrim from 'spacetrim';
2
2
  import { extractBlock } from '../../postprocessing/utils/extractBlock';
3
3
  import { prettifyMarkdown } from '../../utils/markdown/prettifyMarkdown';
4
+ import { trimCodeBlock } from '../../utils/markdown/trimCodeBlock';
5
+ import { trimEndOfCodeBlock } from '../../utils/markdown/trimEndOfCodeBlock';
4
6
  import { capitalize } from '../../utils/normalization/capitalize';
5
7
  import { decapitalize } from '../../utils/normalization/decapitalize';
6
8
  import { nameToUriPart } from '../../utils/normalization/nameToUriPart';
7
9
  import { nameToUriParts } from '../../utils/normalization/nameToUriParts';
8
10
  import { normalizeToKebabCase } from '../../utils/normalization/normalize-to-kebab-case';
11
+ import { normalizeTo_camelCase } from '../../utils/normalization/normalizeTo_camelCase';
9
12
  import { normalizeTo_PascalCase } from '../../utils/normalization/normalizeTo_PascalCase';
10
13
  import { normalizeTo_SCREAMING_CASE } from '../../utils/normalization/normalizeTo_SCREAMING_CASE';
11
- import { normalizeTo_camelCase } from '../../utils/normalization/normalizeTo_camelCase';
12
14
  import { normalizeTo_snake_case } from '../../utils/normalization/normalizeTo_snake_case';
13
15
  import { normalizeWhitespaces } from '../../utils/normalization/normalizeWhitespaces';
14
16
  import { removeDiacritics } from '../../utils/normalization/removeDiacritics';
15
- import { removeEmojis } from '../../utils/removeEmojis';
16
- import { removeQuotes } from '../../utils/removeQuotes';
17
- import { trimCodeBlock } from '../../utils/trimCodeBlock';
18
- import { trimEndOfCodeBlock } from '../../utils/trimEndOfCodeBlock';
19
- import { unwrapResult } from '../../utils/unwrapResult';
17
+ import { removeEmojis } from '../../utils/normalization/removeEmojis';
18
+ import { removeQuotes } from '../../utils/normalization/removeQuotes';
19
+ import { unwrapResult } from '../../utils/normalization/unwrapResult';
20
20
  /**
21
21
  * Collection of utility functions that can be used for post-processing model outputs.
22
22
  * These functions help transform, extract, or format the raw model responses.
@@ -1,4 +1,5 @@
1
1
  import type { FormatCommand } from '../commands/FORMAT/FormatCommand';
2
+ import type { ChatMessage } from '../book-components/Chat/types/ChatMessage';
2
3
  import type { Expectations } from '../pipeline/PipelineJson/Expectations';
3
4
  import type { ChatModelRequirements } from './ModelRequirements';
4
5
  import type { CompletionModelRequirements } from './ModelRequirements';
@@ -38,6 +39,10 @@ export type ChatPrompt = CommonPrompt & {
38
39
  * Requirements for chat model
39
40
  */
40
41
  modelRequirements: ChatModelRequirements;
42
+ /**
43
+ * Optional chat thread (history of previous messages)
44
+ */
45
+ thread?: ChatMessage[];
41
46
  };
42
47
  /**
43
48
  * Embedding prompt
@@ -1,5 +1,5 @@
1
1
  import type { string_markdown } from '../../types/typeAliases';
2
- import type { FromtoItems } from '../FromtoItems';
2
+ import type { FromtoItems } from '../misc/FromtoItems';
3
3
  /**
4
4
  * Options for `CreateMarkdownChartOptions`
5
5
  */
@@ -1,4 +1,4 @@
1
- import { string_markdown } from '../../types/typeAliases';
1
+ import type { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Function `humanizeAiText` will remove traces of AI text generation artifacts
4
4
  *
@@ -1,4 +1,4 @@
1
- import { string_markdown } from '../../types/typeAliases';
1
+ import type { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change ellipsis character to three dots `…` -> `...`
4
4
  *
@@ -1,4 +1,4 @@
1
- import { string_markdown } from '../../types/typeAliases';
1
+ import type { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change em-dashes to regular dashes `—` -> `-`
4
4
  *
@@ -1,4 +1,4 @@
1
- import { string_markdown } from '../../types/typeAliases';
1
+ import type { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change smart quotes to regular quotes
4
4
  *
@@ -1,4 +1,4 @@
1
- import { string_markdown } from '../../types/typeAliases';
1
+ import type { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Change unprintable hard spaces to regular spaces
4
4
  *
@@ -1,4 +1,4 @@
1
- import { string_markdown } from '../../types/typeAliases';
1
+ import type { string_markdown } from '../../types/typeAliases';
2
2
  /**
3
3
  * Function `promptbookifyAiText` will slightly modify the text so we know it was processed by Promptbook
4
4
  *
@@ -5,6 +5,6 @@
5
5
  * Note: This is useful for post-processing of the result of the chat LLM model
6
6
  * when the model wraps the result in the (markdown) code block.
7
7
  *
8
- * @public exported from `@promptbook/utils`
8
+ * @public exported from `@promptbook/markdown-utils`
9
9
  */
10
10
  export declare function trimCodeBlock(value: string): string;
@@ -4,6 +4,6 @@
4
4
  * Note: This is useful for post-processing of the result of the completion LLM model
5
5
  * if you want to start code block in the prompt but you don't want to end it in the result.
6
6
  *
7
- * @public exported from `@promptbook/utils`
7
+ * @public exported from `@promptbook/markdown-utils`
8
8
  */
9
9
  export declare function trimEndOfCodeBlock(value: string): string;
@@ -1,6 +1,6 @@
1
1
  import { type IDestroyable } from 'destroyable';
2
- import type { string_name } from '../types/typeAliases';
3
- import type { TODO_string } from './organization/TODO_string';
2
+ import type { string_name } from '../../types/typeAliases';
3
+ import type { TODO_string } from '../organization/TODO_string';
4
4
  /**
5
5
  * Represents an entity in a global registry.
6
6
  * Contains identifying information about the package and class.
@@ -1,4 +1,4 @@
1
- import type { string_date_iso8601 } from '../types/typeAliases';
1
+ import type { string_date_iso8601 } from '../../types/typeAliases';
2
2
  /**
3
3
  * Simple wrapper `new Date().toISOString()`
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Arrayable } from '../types/Arrayable';
1
+ import type { Arrayable } from '../../types/Arrayable';
2
2
  /**
3
3
  * Takes an item or an array of items and returns an array of items
4
4
  *
@@ -0,0 +1,5 @@
1
+ import type { TODO_any } from '../organization/TODO_any';
2
+ /**
3
+ * @public exported from `@promptbook/utils`
4
+ */
5
+ export declare function debounce<T extends (...args: TODO_any[]) => void>(fn: T, delay: number): (...args: Parameters<T>) => void;
@@ -1,4 +1,4 @@
1
- import type { string_char_emoji } from '../types/typeAliasEmoji';
1
+ import type { string_char_emoji } from '../../types/typeAliasEmoji';
2
2
  /**
3
3
  * All possible emoji chars like "🍆", "🍡", "🍤"...
4
4
  * Note: this will be needed to update annually - now updated at 2022-01-19
@@ -0,0 +1,20 @@
1
+ import type { string_css_class } from '../../types/typeAliases';
2
+ export type InjectCssModuleIntoShadowRootOptions = {
3
+ /**
4
+ * The shadow root where the styles should be injected
5
+ */
6
+ shadowRoot: ShadowRoot;
7
+ /**
8
+ * The imported CSS module styles object
9
+ */
10
+ styles: Record<string_css_class, string_css_class>;
11
+ };
12
+ /**
13
+ * Inject the CSS module rules (derived from imported `styles`) into the provided shadow root.
14
+ * This allows CSS modules (which are normally emitted into the document head) to be
15
+ * available inside the component's shadow DOM.
16
+ *
17
+ * @public exported from `@promptbook/components`
18
+ * <- TODO: [🧠] Make `@promptbook/components-utils`
19
+ */
20
+ export declare function injectCssModuleIntoShadowRoot(options: InjectCssModuleIntoShadowRootOptions): void;
@@ -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.102.0-3`).
18
+ * It follows semantic versioning (e.g., `0.102.0-5`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/openai",
3
- "version": "0.102.0-4",
3
+ "version": "0.102.0-6",
4
4
  "description": "Promptbook: Run AI apps in plain human language across multiple models and platforms",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -102,7 +102,7 @@
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.102.0-4"
105
+ "@promptbook/core": "0.102.0-6"
106
106
  },
107
107
  "dependencies": {
108
108
  "bottleneck": "^2.19.5",
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.102.0-4';
28
+ const PROMPTBOOK_ENGINE_VERSION = '0.102.0-6';
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
@@ -2025,6 +2025,10 @@
2025
2025
  * Tracks models and parameters that have already been retried to prevent infinite loops
2026
2026
  */
2027
2027
  this.retriedUnsupportedParameters = new Set();
2028
+ /**
2029
+ * Tracks the history of attempts for error reporting
2030
+ */
2031
+ this.attemptHistory = [];
2028
2032
  // TODO: Allow configuring rate limits via options
2029
2033
  this.limiter = new Bottleneck__default["default"]({
2030
2034
  minTime: 60000 / (this.options.maxRequestsPerMinute || DEFAULT_MAX_REQUESTS_PER_MINUTE),
@@ -2091,7 +2095,7 @@
2091
2095
  /**
2092
2096
  * Internal method that handles parameter retry for chat model calls
2093
2097
  */
2094
- async callChatModelWithRetry(prompt, currentModelRequirements) {
2098
+ async callChatModelWithRetry(prompt, currentModelRequirements, attemptStack = []) {
2095
2099
  var _a;
2096
2100
  if (this.options.isVerbose) {
2097
2101
  console.info(`💬 ${this.title} callChatModel call`, { prompt, currentModelRequirements });
@@ -2118,6 +2122,14 @@
2118
2122
  // <- TODO: [🚸] Not all models are compatible with JSON mode
2119
2123
  // > 'response_format' of type 'json_object' is not supported with this model.
2120
2124
  const rawPromptContent = templateParameters(content, { ...parameters, modelName });
2125
+ // Convert thread to OpenAI format if present
2126
+ let threadMessages = [];
2127
+ if ('thread' in prompt && Array.isArray(prompt.thread)) {
2128
+ threadMessages = prompt.thread.map((msg) => ({
2129
+ role: msg.role === 'assistant' ? 'assistant' : 'user',
2130
+ content: msg.content,
2131
+ }));
2132
+ }
2121
2133
  const rawRequest = {
2122
2134
  ...modelSettings,
2123
2135
  messages: [
@@ -2129,6 +2141,7 @@
2129
2141
  content: currentModelRequirements.systemMessage,
2130
2142
  },
2131
2143
  ]),
2144
+ ...threadMessages,
2132
2145
  {
2133
2146
  role: 'user',
2134
2147
  content: rawPromptContent,
@@ -2189,6 +2202,15 @@
2189
2202
  assertsError(error);
2190
2203
  // Check if this is an unsupported parameter error
2191
2204
  if (!isUnsupportedParameterError(error)) {
2205
+ // If we have attemptStack, include it in the error message
2206
+ if (attemptStack.length > 0) {
2207
+ throw new PipelineExecutionError(`All attempts failed. Attempt history:\n` +
2208
+ attemptStack.map((a, i) => ` ${i + 1}. Model: ${a.modelName}` +
2209
+ (a.unsupportedParameter ? `, Stripped: ${a.unsupportedParameter}` : '') +
2210
+ `, Error: ${a.errorMessage}` +
2211
+ (a.stripped ? ' (stripped and retried)' : '')).join('\n') +
2212
+ `\nFinal error: ${error.message}`);
2213
+ }
2192
2214
  throw error;
2193
2215
  }
2194
2216
  // Parse which parameter is unsupported
@@ -2202,11 +2224,19 @@
2202
2224
  // Create a unique key for this model + parameter combination to prevent infinite loops
2203
2225
  const retryKey = `${modelName}-${unsupportedParameter}`;
2204
2226
  if (this.retriedUnsupportedParameters.has(retryKey)) {
2205
- // Already retried this parameter, throw the error
2206
- if (this.options.isVerbose) {
2207
- console.warn(colors__default["default"].bgRed('Error'), `Parameter '${unsupportedParameter}' for model '${modelName}' already retried once, throwing error:`, error.message);
2208
- }
2209
- throw error;
2227
+ // Already retried this parameter, throw the error with attemptStack
2228
+ attemptStack.push({
2229
+ modelName,
2230
+ unsupportedParameter,
2231
+ errorMessage: error.message,
2232
+ stripped: true,
2233
+ });
2234
+ throw new PipelineExecutionError(`All attempts failed. Attempt history:\n` +
2235
+ attemptStack.map((a, i) => ` ${i + 1}. Model: ${a.modelName}` +
2236
+ (a.unsupportedParameter ? `, Stripped: ${a.unsupportedParameter}` : '') +
2237
+ `, Error: ${a.errorMessage}` +
2238
+ (a.stripped ? ' (stripped and retried)' : '')).join('\n') +
2239
+ `\nFinal error: ${error.message}`);
2210
2240
  }
2211
2241
  // Mark this parameter as retried
2212
2242
  this.retriedUnsupportedParameters.add(retryKey);
@@ -2214,9 +2244,16 @@
2214
2244
  if (this.options.isVerbose) {
2215
2245
  console.warn(colors__default["default"].bgYellow('Warning'), `Removing unsupported parameter '${unsupportedParameter}' for model '${modelName}' and retrying request`);
2216
2246
  }
2247
+ // Add to attemptStack
2248
+ attemptStack.push({
2249
+ modelName,
2250
+ unsupportedParameter,
2251
+ errorMessage: error.message,
2252
+ stripped: true,
2253
+ });
2217
2254
  // Remove the unsupported parameter and retry
2218
2255
  const modifiedModelRequirements = removeUnsupportedModelRequirement(currentModelRequirements, unsupportedParameter);
2219
- return this.callChatModelWithRetry(prompt, modifiedModelRequirements);
2256
+ return this.callChatModelWithRetry(prompt, modifiedModelRequirements, attemptStack);
2220
2257
  }
2221
2258
  }
2222
2259
  /**
@@ -2228,7 +2265,7 @@
2228
2265
  /**
2229
2266
  * Internal method that handles parameter retry for completion model calls
2230
2267
  */
2231
- async callCompletionModelWithRetry(prompt, currentModelRequirements) {
2268
+ async callCompletionModelWithRetry(prompt, currentModelRequirements, attemptStack = []) {
2232
2269
  var _a;
2233
2270
  if (this.options.isVerbose) {
2234
2271
  console.info(`🖋 ${this.title} callCompletionModel call`, { prompt, currentModelRequirements });
@@ -2303,6 +2340,14 @@
2303
2340
  assertsError(error);
2304
2341
  // Check if this is an unsupported parameter error
2305
2342
  if (!isUnsupportedParameterError(error)) {
2343
+ if (attemptStack.length > 0) {
2344
+ throw new PipelineExecutionError(`All attempts failed. Attempt history:\n` +
2345
+ attemptStack.map((a, i) => ` ${i + 1}. Model: ${a.modelName}` +
2346
+ (a.unsupportedParameter ? `, Stripped: ${a.unsupportedParameter}` : '') +
2347
+ `, Error: ${a.errorMessage}` +
2348
+ (a.stripped ? ' (stripped and retried)' : '')).join('\n') +
2349
+ `\nFinal error: ${error.message}`);
2350
+ }
2306
2351
  throw error;
2307
2352
  }
2308
2353
  // Parse which parameter is unsupported
@@ -2316,11 +2361,18 @@
2316
2361
  // Create a unique key for this model + parameter combination to prevent infinite loops
2317
2362
  const retryKey = `${modelName}-${unsupportedParameter}`;
2318
2363
  if (this.retriedUnsupportedParameters.has(retryKey)) {
2319
- // Already retried this parameter, throw the error
2320
- if (this.options.isVerbose) {
2321
- console.warn(colors__default["default"].bgRed('Error'), `Parameter '${unsupportedParameter}' for model '${modelName}' already retried once, throwing error:`, error.message);
2322
- }
2323
- throw error;
2364
+ attemptStack.push({
2365
+ modelName,
2366
+ unsupportedParameter,
2367
+ errorMessage: error.message,
2368
+ stripped: true,
2369
+ });
2370
+ throw new PipelineExecutionError(`All attempts failed. Attempt history:\n` +
2371
+ attemptStack.map((a, i) => ` ${i + 1}. Model: ${a.modelName}` +
2372
+ (a.unsupportedParameter ? `, Stripped: ${a.unsupportedParameter}` : '') +
2373
+ `, Error: ${a.errorMessage}` +
2374
+ (a.stripped ? ' (stripped and retried)' : '')).join('\n') +
2375
+ `\nFinal error: ${error.message}`);
2324
2376
  }
2325
2377
  // Mark this parameter as retried
2326
2378
  this.retriedUnsupportedParameters.add(retryKey);
@@ -2328,9 +2380,15 @@
2328
2380
  if (this.options.isVerbose) {
2329
2381
  console.warn(colors__default["default"].bgYellow('Warning'), `Removing unsupported parameter '${unsupportedParameter}' for model '${modelName}' and retrying request`);
2330
2382
  }
2383
+ attemptStack.push({
2384
+ modelName,
2385
+ unsupportedParameter,
2386
+ errorMessage: error.message,
2387
+ stripped: true,
2388
+ });
2331
2389
  // Remove the unsupported parameter and retry
2332
2390
  const modifiedModelRequirements = removeUnsupportedModelRequirement(currentModelRequirements, unsupportedParameter);
2333
- return this.callCompletionModelWithRetry(prompt, modifiedModelRequirements);
2391
+ return this.callCompletionModelWithRetry(prompt, modifiedModelRequirements, attemptStack);
2334
2392
  }
2335
2393
  }
2336
2394
  /**
@@ -2342,7 +2400,7 @@
2342
2400
  /**
2343
2401
  * Internal method that handles parameter retry for embedding model calls
2344
2402
  */
2345
- async callEmbeddingModelWithRetry(prompt, currentModelRequirements) {
2403
+ async callEmbeddingModelWithRetry(prompt, currentModelRequirements, attemptStack = []) {
2346
2404
  if (this.options.isVerbose) {
2347
2405
  console.info(`🖋 ${this.title} embedding call`, { prompt, currentModelRequirements });
2348
2406
  }
@@ -2406,6 +2464,14 @@
2406
2464
  assertsError(error);
2407
2465
  // Check if this is an unsupported parameter error
2408
2466
  if (!isUnsupportedParameterError(error)) {
2467
+ if (attemptStack.length > 0) {
2468
+ throw new PipelineExecutionError(`All attempts failed. Attempt history:\n` +
2469
+ attemptStack.map((a, i) => ` ${i + 1}. Model: ${a.modelName}` +
2470
+ (a.unsupportedParameter ? `, Stripped: ${a.unsupportedParameter}` : '') +
2471
+ `, Error: ${a.errorMessage}` +
2472
+ (a.stripped ? ' (stripped and retried)' : '')).join('\n') +
2473
+ `\nFinal error: ${error.message}`);
2474
+ }
2409
2475
  throw error;
2410
2476
  }
2411
2477
  // Parse which parameter is unsupported
@@ -2419,11 +2485,18 @@
2419
2485
  // Create a unique key for this model + parameter combination to prevent infinite loops
2420
2486
  const retryKey = `${modelName}-${unsupportedParameter}`;
2421
2487
  if (this.retriedUnsupportedParameters.has(retryKey)) {
2422
- // Already retried this parameter, throw the error
2423
- if (this.options.isVerbose) {
2424
- console.warn(colors__default["default"].bgRed('Error'), `Parameter '${unsupportedParameter}' for model '${modelName}' already retried once, throwing error:`, error.message);
2425
- }
2426
- throw error;
2488
+ attemptStack.push({
2489
+ modelName,
2490
+ unsupportedParameter,
2491
+ errorMessage: error.message,
2492
+ stripped: true,
2493
+ });
2494
+ throw new PipelineExecutionError(`All attempts failed. Attempt history:\n` +
2495
+ attemptStack.map((a, i) => ` ${i + 1}. Model: ${a.modelName}` +
2496
+ (a.unsupportedParameter ? `, Stripped: ${a.unsupportedParameter}` : '') +
2497
+ `, Error: ${a.errorMessage}` +
2498
+ (a.stripped ? ' (stripped and retried)' : '')).join('\n') +
2499
+ `\nFinal error: ${error.message}`);
2427
2500
  }
2428
2501
  // Mark this parameter as retried
2429
2502
  this.retriedUnsupportedParameters.add(retryKey);
@@ -2431,9 +2504,15 @@
2431
2504
  if (this.options.isVerbose) {
2432
2505
  console.warn(colors__default["default"].bgYellow('Warning'), `Removing unsupported parameter '${unsupportedParameter}' for model '${modelName}' and retrying request`);
2433
2506
  }
2507
+ attemptStack.push({
2508
+ modelName,
2509
+ unsupportedParameter,
2510
+ errorMessage: error.message,
2511
+ stripped: true,
2512
+ });
2434
2513
  // Remove the unsupported parameter and retry
2435
2514
  const modifiedModelRequirements = removeUnsupportedModelRequirement(currentModelRequirements, unsupportedParameter);
2436
- return this.callEmbeddingModelWithRetry(prompt, modifiedModelRequirements);
2515
+ return this.callEmbeddingModelWithRetry(prompt, modifiedModelRequirements, attemptStack);
2437
2516
  }
2438
2517
  }
2439
2518
  // <- Note: [🤖] callXxxModel