@promptbook/core 0.104.0-11 → 0.104.0-12

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 (24) hide show
  1. package/esm/index.es.js +91 -27
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/typings/src/_packages/types.index.d.ts +2 -0
  4. package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +1 -0
  5. package/esm/typings/src/book-2.0/agent-source/AgentModelRequirements.d.ts +5 -0
  6. package/esm/typings/src/book-2.0/agent-source/createAgentModelRequirements.tools.test.d.ts +1 -0
  7. package/esm/typings/src/commitments/META/META_DESCRIPTION.d.ts +41 -0
  8. package/esm/typings/src/commitments/USE_SEARCH_ENGINE/USE_SEARCH_ENGINE.d.ts +2 -2
  9. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForTestingAndScriptsAndPlayground.d.ts +1 -1
  10. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +1 -1
  11. package/esm/typings/src/llm-providers/_common/utils/count-total-usage/LlmExecutionToolsWithTotalUsage.d.ts +1 -1
  12. package/esm/typings/src/llm-providers/_common/utils/count-total-usage/limitTotalUsage.d.ts +1 -1
  13. package/esm/typings/src/llm-providers/_multiple/getSingleLlmExecutionTools.d.ts +1 -1
  14. package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +1 -1
  15. package/esm/typings/src/llm-providers/openai/utils/mapToolsToOpenAi.d.ts +8 -0
  16. package/esm/typings/src/search-engines/SearchResult.d.ts +4 -4
  17. package/esm/typings/src/search-engines/bing/BingSearchEngine.d.ts +1 -1
  18. package/esm/typings/src/search-engines/dummy/DummySearchEngine.d.ts +1 -1
  19. package/esm/typings/src/types/LlmToolDefinition.d.ts +20 -0
  20. package/esm/typings/src/types/ModelRequirements.d.ts +13 -0
  21. package/esm/typings/src/version.d.ts +1 -1
  22. package/package.json +1 -1
  23. package/umd/index.umd.js +91 -27
  24. package/umd/index.umd.js.map +1 -1
@@ -188,6 +188,7 @@ import type { BookTranspiler } from '../transpilers/_common/BookTranspiler';
188
188
  import type { BookTranspilerOptions } from '../transpilers/_common/BookTranspilerOptions';
189
189
  import type { IntermediateFilesStrategy } from '../types/IntermediateFilesStrategy';
190
190
  import type { LlmCall } from '../types/LlmCall';
191
+ import type { LlmToolDefinition } from '../types/LlmToolDefinition';
191
192
  import type { Message } from '../types/Message';
192
193
  import type { ModelRequirements } from '../types/ModelRequirements';
193
194
  import type { CompletionModelRequirements } from '../types/ModelRequirements';
@@ -559,6 +560,7 @@ export type { BookTranspiler };
559
560
  export type { BookTranspilerOptions };
560
561
  export type { IntermediateFilesStrategy };
561
562
  export type { LlmCall };
563
+ export type { LlmToolDefinition };
562
564
  export type { Message };
563
565
  export type { ModelRequirements };
564
566
  export type { CompletionModelRequirements };
@@ -73,6 +73,7 @@ export type AgentBasicInformation = {
73
73
  */
74
74
  meta: {
75
75
  fullname?: string;
76
+ description?: string;
76
77
  image?: string_url_image;
77
78
  font?: string_fonts;
78
79
  color?: string_color;
@@ -1,3 +1,4 @@
1
+ import type { LlmToolDefinition } from '../../types/LlmToolDefinition';
1
2
  import type { string_knowledge_source_link } from '../../types/typeAliases';
2
3
  import type { TODO_any } from '../../utils/organization/TODO_any';
3
4
  /**
@@ -45,6 +46,10 @@ export type AgentModelRequirements = {
45
46
  * Top-k sampling value for the agent's responses
46
47
  */
47
48
  readonly topK?: number;
49
+ /**
50
+ * Tools available for the agent
51
+ */
52
+ readonly tools?: ReadonlyArray<LlmToolDefinition>;
48
53
  /**
49
54
  * Arbitrary metadata storage for commitments
50
55
  * Each commitment can store its own data here
@@ -0,0 +1,41 @@
1
+ import type { AgentModelRequirements } from '../../book-2.0/agent-source/AgentModelRequirements';
2
+ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
3
+ /**
4
+ * META DESCRIPTION commitment definition
5
+ *
6
+ * The META DESCRIPTION commitment sets the agent's meta description for the profile page.
7
+ * This commitment is special because it doesn't affect the system message,
8
+ * but is handled separately in the parsing logic.
9
+ *
10
+ * Example usage in agent source:
11
+ *
12
+ * ```book
13
+ * META DESCRIPTION An AI assistant specialized in business tasks
14
+ * ```
15
+ *
16
+ * @private [🪔] Maybe export the commitments through some package
17
+ */
18
+ export declare class MetaDescriptionCommitmentDefinition extends BaseCommitmentDefinition<'META DESCRIPTION'> {
19
+ constructor();
20
+ /**
21
+ * Short one-line description of META DESCRIPTION.
22
+ */
23
+ get description(): string;
24
+ /**
25
+ * Icon for this commitment.
26
+ */
27
+ get icon(): string;
28
+ /**
29
+ * Markdown documentation for META DESCRIPTION commitment.
30
+ */
31
+ get documentation(): string;
32
+ applyToAgentModelRequirements(requirements: AgentModelRequirements, content: string): AgentModelRequirements;
33
+ /**
34
+ * Extracts the meta description from the content
35
+ * This is used by the parsing logic
36
+ */
37
+ extractMetaDescription(content: string): string | null;
38
+ }
39
+ /**
40
+ * Note: [💞] Ignore a discrepancy between file name and entity name
41
+ */
@@ -6,13 +6,13 @@ import { BaseCommitmentDefinition } from '../_base/BaseCommitmentDefinition';
6
6
  * The `USE SEARCH ENGINE` commitment indicates that the agent should utilize a search engine tool
7
7
  * to access and retrieve up-to-date information from the internet when necessary.
8
8
  *
9
- * The content following `USE SEARCH ENGINE` is ignored (similar to NOTE).
9
+ * The content following `USE SEARCH ENGINE` is an arbitrary text that the agent should know (e.g. search scope or instructions).
10
10
  *
11
11
  * Example usage in agent source:
12
12
  *
13
13
  * ```book
14
14
  * USE SEARCH ENGINE
15
- * USE SEARCH ENGINE This will be ignored
15
+ * USE SEARCH ENGINE Hledej informace o Přemyslovcích
16
16
  * ```
17
17
  *
18
18
  * @private [🪔] Maybe export the commitments through some package
@@ -21,7 +21,7 @@ export declare function $provideLlmToolsForTestingAndScriptsAndPlayground(option
21
21
  export {};
22
22
  /**
23
23
  * Note: [⚪] This should never be in any released package
24
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
24
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
25
25
  * TODO: This should be maybe not under `_common` but under `utils-internal` / `utils/internal`
26
26
  * TODO: [®] DRY Register logi
27
27
  */
@@ -51,7 +51,7 @@ export declare function $provideLlmToolsForWizardOrCli(options?: ProvideLlmTools
51
51
  export {};
52
52
  /**
53
53
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
54
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
54
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
55
55
  * TODO: [🥃] Allow `ptbk make` without llm tools
56
56
  * TODO: This should be maybe not under `_common` but under `utils-internal` / `utils/internal`
57
57
  * TODO: [®] DRY Register logic
@@ -17,6 +17,6 @@ export type LlmExecutionToolsWithTotalUsage = LlmExecutionTools & {
17
17
  spending(): Observable<Usage>;
18
18
  };
19
19
  /**
20
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
20
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
21
21
  * Note: [🥫] Not using getter `get totalUsage` but `getTotalUsage` to allow this object to be proxied
22
22
  */
@@ -32,5 +32,5 @@ export {};
32
32
  * TODO: [🧠][💸] Maybe make some common abstraction `interceptLlmTools` and use here (or use javascript Proxy?)
33
33
  * TODO: [🧠] Is there some meaningfull way how to test this util
34
34
  * TODO: [🧠][🌯] Maybe a way how to hide ability to `get totalUsage`
35
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
35
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
36
36
  */
@@ -8,5 +8,5 @@ import { MultipleLlmExecutionTools } from './MultipleLlmExecutionTools';
8
8
  export declare function getSingleLlmExecutionTools(oneOrMoreLlmExecutionTools: undefined | LlmExecutionTools | ReadonlyArray<LlmExecutionTools>): LlmExecutionTools | MultipleLlmExecutionTools;
9
9
  /**
10
10
  * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
11
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
11
+ * TODO: [👷‍♂️] Write a comprehensive manual about how to construct and use LLM execution tools in Promptbook
12
12
  */
@@ -19,5 +19,5 @@ import { MultipleLlmExecutionTools } from './MultipleLlmExecutionTools';
19
19
  export declare function joinLlmExecutionTools(title: string_title & string_markdown_text, ...llmExecutionTools: ReadonlyArray<LlmExecutionTools>): MultipleLlmExecutionTools;
20
20
  /**
21
21
  * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
22
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
22
+ * TODO: [👷‍♂️] Write a comprehensive manual about how to construct and use LLM execution tools in Promptbook
23
23
  */
@@ -0,0 +1,8 @@
1
+ import type OpenAI from 'openai';
2
+ import type { LlmToolDefinition } from '../../../types/LlmToolDefinition';
3
+ /**
4
+ * Maps Promptbook tools to OpenAI tools.
5
+ *
6
+ * @private
7
+ */
8
+ export declare function mapToolsToOpenAi(tools: ReadonlyArray<LlmToolDefinition>): Array<OpenAI.Chat.Completions.ChatCompletionTool>;
@@ -1,18 +1,18 @@
1
1
  import type { string_url } from '../types/typeAliases';
2
2
  /**
3
- * @@@
3
+ * Represents a search result from a search engine.
4
4
  */
5
5
  export type SearchResult = {
6
6
  /**
7
- * @@@
7
+ * The title of the search result.
8
8
  */
9
9
  title: string;
10
10
  /**
11
- * @@@
11
+ * The URL of the search result.
12
12
  */
13
13
  url: string_url;
14
14
  /**
15
- * @@@
15
+ * A short snippet or description of the search result.
16
16
  */
17
17
  snippet: string;
18
18
  };
@@ -3,7 +3,7 @@ import type { string_markdown, string_markdown_text, string_title } from '../../
3
3
  import type { SearchEngine } from '../SearchEngine';
4
4
  import type { SearchResult } from '../SearchResult';
5
5
  /**
6
- * @@@
6
+ * A search engine implementation that uses the Bing Web Search API.
7
7
  *
8
8
  * @private <- TODO: !!!! Export via some package
9
9
  */
@@ -3,7 +3,7 @@ import type { string_markdown, string_markdown_text, string_title } from '../../
3
3
  import type { SearchEngine } from '../SearchEngine';
4
4
  import type { SearchResult } from '../SearchResult';
5
5
  /**
6
- * @@@
6
+ * A dummy implementation of SearchEngine for testing purposes.
7
7
  *
8
8
  * @private <- TODO: !!!! Export via some package, maybe `@promptbook/search-engines` or `@promptbook/fake-llm`
9
9
  */
@@ -0,0 +1,20 @@
1
+ import type { string_markdown_text, string_name } from './typeAliases';
2
+ /**
3
+ * Definition of a tool that can be used by the model
4
+ *
5
+ * Note: [🚉] This is fully serializable as JSON
6
+ */
7
+ export type LlmToolDefinition = {
8
+ /**
9
+ * Name of the tool
10
+ */
11
+ readonly name: string_name;
12
+ /**
13
+ * Description of the tool
14
+ */
15
+ readonly description: string_markdown_text;
16
+ /**
17
+ * Parameters of the tool in JSON Schema format
18
+ */
19
+ readonly parameters: Record<string, unknown>;
20
+ };
@@ -1,3 +1,4 @@
1
+ import type { LlmToolDefinition } from './LlmToolDefinition';
1
2
  import type { ModelVariant } from './ModelVariant';
2
3
  import type { number_model_temperature, number_seed, string_model_name, string_system_message } from './typeAliases';
3
4
  /**
@@ -28,6 +29,12 @@ export type CompletionModelRequirements = CommonModelRequirements & {
28
29
  * Maximum number of tokens that can be generated by the model
29
30
  */
30
31
  readonly maxTokens?: number;
32
+ /**
33
+ * Tools available for the model
34
+ *
35
+ * Note: [🚉] This is fully serializable as JSON
36
+ */
37
+ readonly tools?: LlmToolDefinition[];
31
38
  };
32
39
  /**
33
40
  * Model requirements for the chat variant
@@ -53,6 +60,12 @@ export type ChatModelRequirements = CommonModelRequirements & {
53
60
  * Maximum number of tokens that can be generated by the model
54
61
  */
55
62
  readonly maxTokens?: number;
63
+ /**
64
+ * Tools available for the model
65
+ *
66
+ * Note: [🚉] This is fully serializable as JSON
67
+ */
68
+ readonly tools?: LlmToolDefinition[];
56
69
  };
57
70
  /**
58
71
  * Model requirements for the image generation variant
@@ -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.104.0-10`).
18
+ * It follows semantic versioning (e.g., `0.104.0-11`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/core",
3
- "version": "0.104.0-11",
3
+ "version": "0.104.0-12",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
package/umd/index.umd.js CHANGED
@@ -28,7 +28,7 @@
28
28
  * @generated
29
29
  * @see https://github.com/webgptorg/promptbook
30
30
  */
31
- const PROMPTBOOK_ENGINE_VERSION = '0.104.0-11';
31
+ const PROMPTBOOK_ENGINE_VERSION = '0.104.0-12';
32
32
  /**
33
33
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
34
34
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -4004,7 +4004,7 @@
4004
4004
  }
4005
4005
  /**
4006
4006
  * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
4007
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
4007
+ * TODO: [👷‍♂️] Write a comprehensive manual about how to construct and use LLM execution tools in Promptbook
4008
4008
  */
4009
4009
 
4010
4010
  /**
@@ -4021,7 +4021,7 @@
4021
4021
  }
4022
4022
  /**
4023
4023
  * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
4024
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
4024
+ * TODO: [👷‍♂️] Write a comprehensive manual about how to construct and use LLM execution tools in Promptbook
4025
4025
  */
4026
4026
 
4027
4027
  /**
@@ -10606,19 +10606,37 @@
10606
10606
  `);
10607
10607
  }
10608
10608
  applyToAgentModelRequirements(requirements, content) {
10609
- // We simply mark that browser capability is enabled in metadata
10610
- // Get existing metadata
10611
- const existingMetadata = requirements.metadata || {};
10612
10609
  // Get existing tools array or create new one
10613
- const existingTools = existingMetadata.tools || [];
10614
- // Add 'browser' to tools if not already present
10615
- const updatedTools = existingTools.includes('browser') ? existingTools : [...existingTools, 'browser'];
10616
- // Return requirements with updated metadata
10610
+ const existingTools = requirements.tools || [];
10611
+ // Add 'web_browser' to tools if not already present
10612
+ const updatedTools = existingTools.some((tool) => tool.name === 'web_browser')
10613
+ ? existingTools
10614
+ : [
10615
+ ...existingTools,
10616
+ {
10617
+ name: 'web_browser',
10618
+ description: spaceTrim$1.spaceTrim(`
10619
+ A tool that can browse the web.
10620
+ Use this tool when you need to access specific websites or browse the internet.
10621
+ `),
10622
+ parameters: {
10623
+ type: 'object',
10624
+ properties: {
10625
+ url: {
10626
+ type: 'string',
10627
+ description: 'The URL to browse',
10628
+ },
10629
+ },
10630
+ required: ['url'],
10631
+ },
10632
+ },
10633
+ ];
10634
+ // Return requirements with updated tools and metadata
10617
10635
  return {
10618
10636
  ...requirements,
10637
+ tools: updatedTools,
10619
10638
  metadata: {
10620
- ...existingMetadata,
10621
- tools: updatedTools,
10639
+ ...requirements.metadata,
10622
10640
  useBrowser: true,
10623
10641
  },
10624
10642
  };
@@ -10711,13 +10729,13 @@
10711
10729
  * The `USE SEARCH ENGINE` commitment indicates that the agent should utilize a search engine tool
10712
10730
  * to access and retrieve up-to-date information from the internet when necessary.
10713
10731
  *
10714
- * The content following `USE SEARCH ENGINE` is ignored (similar to NOTE).
10732
+ * The content following `USE SEARCH ENGINE` is an arbitrary text that the agent should know (e.g. search scope or instructions).
10715
10733
  *
10716
10734
  * Example usage in agent source:
10717
10735
  *
10718
10736
  * ```book
10719
10737
  * USE SEARCH ENGINE
10720
- * USE SEARCH ENGINE This will be ignored
10738
+ * USE SEARCH ENGINE Hledej informace o Přemyslovcích
10721
10739
  * ```
10722
10740
  *
10723
10741
  * @private [🪔] Maybe export the commitments through some package
@@ -10749,7 +10767,7 @@
10749
10767
 
10750
10768
  ## Key aspects
10751
10769
 
10752
- - The content following \`USE SEARCH ENGINE\` is ignored (similar to NOTE)
10770
+ - The content following \`USE SEARCH ENGINE\` is an arbitrary text that the agent should know (e.g. search scope or instructions).
10753
10771
  - The actual search engine tool usage is handled by the agent runtime
10754
10772
  - Allows the agent to search for current information from the web
10755
10773
  - Useful for research tasks, finding facts, and accessing dynamic content
@@ -10774,20 +10792,39 @@
10774
10792
  `);
10775
10793
  }
10776
10794
  applyToAgentModelRequirements(requirements, content) {
10777
- // We simply mark that search engine capability is enabled in metadata
10778
- // Get existing metadata
10779
- const existingMetadata = requirements.metadata || {};
10780
10795
  // Get existing tools array or create new one
10781
- const existingTools = existingMetadata.tools || [];
10782
- // Add 'search-engine' to tools if not already present
10783
- const updatedTools = existingTools.includes('search-engine') ? existingTools : [...existingTools, 'search-engine'];
10784
- // Return requirements with updated metadata
10796
+ const existingTools = requirements.tools || [];
10797
+ // Add 'web_search' to tools if not already present
10798
+ const updatedTools = existingTools.some((tool) => tool.name === 'web_search')
10799
+ ? existingTools
10800
+ : [
10801
+ ...existingTools,
10802
+ {
10803
+ name: 'web_search',
10804
+ description: spaceTrim$1.spaceTrim(`
10805
+ Search the internet for information.
10806
+ Use this tool when you need to find up-to-date information or facts that you don't know.
10807
+ ${!content ? '' : `Search scope / instructions: ${content}`}
10808
+ `),
10809
+ parameters: {
10810
+ type: 'object',
10811
+ properties: {
10812
+ query: {
10813
+ type: 'string',
10814
+ description: 'The search query',
10815
+ },
10816
+ },
10817
+ required: ['query'],
10818
+ },
10819
+ },
10820
+ ];
10821
+ // Return requirements with updated tools and metadata
10785
10822
  return {
10786
10823
  ...requirements,
10824
+ tools: updatedTools,
10787
10825
  metadata: {
10788
- ...existingMetadata,
10789
- tools: updatedTools,
10790
- useSearchEngine: true,
10826
+ ...requirements.metadata,
10827
+ useSearchEngine: content || true,
10791
10828
  },
10792
10829
  };
10793
10830
  }
@@ -11957,6 +11994,10 @@
11957
11994
  meta.image = spaceTrim__default["default"](commitment.content);
11958
11995
  continue;
11959
11996
  }
11997
+ if (commitment.type === 'META DESCRIPTION') {
11998
+ meta.description = spaceTrim__default["default"](commitment.content);
11999
+ continue;
12000
+ }
11960
12001
  if (commitment.type === 'META COLOR') {
11961
12002
  meta.color = normalizeSeparator(commitment.content);
11962
12003
  continue;
@@ -17142,7 +17183,7 @@
17142
17183
  * TODO: [🧠][💸] Maybe make some common abstraction `interceptLlmTools` and use here (or use javascript Proxy?)
17143
17184
  * TODO: [🧠] Is there some meaningfull way how to test this util
17144
17185
  * TODO: [🧠][🌯] Maybe a way how to hide ability to `get totalUsage`
17145
- * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
17186
+ * TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
17146
17187
  */
17147
17188
 
17148
17189
  /**
@@ -18030,6 +18071,22 @@
18030
18071
  * TODO: [🤝] DRY Maybe some common abstraction between `computeOpenAiUsage` and `computeAnthropicClaudeUsage`
18031
18072
  */
18032
18073
 
18074
+ /**
18075
+ * Maps Promptbook tools to OpenAI tools.
18076
+ *
18077
+ * @private
18078
+ */
18079
+ function mapToolsToOpenAi(tools) {
18080
+ return tools.map((tool) => ({
18081
+ type: 'function',
18082
+ function: {
18083
+ name: tool.name,
18084
+ description: tool.description,
18085
+ parameters: tool.parameters,
18086
+ },
18087
+ }));
18088
+ }
18089
+
18033
18090
  /**
18034
18091
  * Parses an OpenAI error message to identify which parameter is unsupported
18035
18092
  *
@@ -18227,6 +18284,9 @@
18227
18284
  },
18228
18285
  ],
18229
18286
  user: (_a = this.options.userId) === null || _a === void 0 ? void 0 : _a.toString(),
18287
+ tools: currentModelRequirements.tools === undefined
18288
+ ? undefined
18289
+ : mapToolsToOpenAi(currentModelRequirements.tools),
18230
18290
  };
18231
18291
  const start = $getCurrentDate();
18232
18292
  if (this.options.isVerbose) {
@@ -18371,6 +18431,7 @@
18371
18431
  const rawPromptContent = templateParameters(content, { ...parameters, modelName });
18372
18432
  const rawRequest = {
18373
18433
  ...modelSettings,
18434
+ model: modelName,
18374
18435
  prompt: rawPromptContent,
18375
18436
  user: (_a = this.options.userId) === null || _a === void 0 ? void 0 : _a.toString(),
18376
18437
  };
@@ -18625,8 +18686,8 @@
18625
18686
  const rawPromptContent = templateParameters(content, { ...parameters, modelName });
18626
18687
  const rawRequest = {
18627
18688
  ...modelSettings,
18628
- size: modelSettings.size || '1024x1024',
18629
18689
  prompt: rawPromptContent,
18690
+ size: modelSettings.size || '1024x1024',
18630
18691
  user: (_a = this.options.userId) === null || _a === void 0 ? void 0 : _a.toString(),
18631
18692
  response_format: 'url', // TODO: [🧠] Maybe allow b64_json
18632
18693
  };
@@ -19028,6 +19089,7 @@
19028
19089
  thread: {
19029
19090
  messages: threadMessages,
19030
19091
  },
19092
+ tools: modelRequirements.tools === undefined ? undefined : mapToolsToOpenAi(modelRequirements.tools),
19031
19093
  // <- TODO: Add user identification here> user: this.options.user,
19032
19094
  };
19033
19095
  const start = $getCurrentDate();
@@ -19551,6 +19613,8 @@
19551
19613
  modelRequirements: {
19552
19614
  ...chatPrompt.modelRequirements,
19553
19615
  ...modelRequirements,
19616
+ // Spread tools to convert readonly array to mutable
19617
+ tools: modelRequirements.tools ? [...modelRequirements.tools] : chatPrompt.modelRequirements.tools,
19554
19618
  // Prepend agent system message to existing system message
19555
19619
  systemMessage: modelRequirements.systemMessage +
19556
19620
  (chatPrompt.modelRequirements.systemMessage