@promptbook/cli 0.112.0-103 → 0.112.0-105

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 (190) hide show
  1. package/apps/agents-server/src/app/AddAgentButton.tsx +0 -5
  2. package/apps/agents-server/src/app/actions.ts +50 -0
  3. package/apps/agents-server/src/app/admin/image-generator-test/ImageAttachmentsEditor.tsx +19 -3
  4. package/apps/agents-server/src/app/admin/limits/LimitsClient.tsx +11 -12
  5. package/apps/agents-server/src/app/admin/metadata/MetadataClient.tsx +34 -2
  6. package/apps/agents-server/src/app/admin/servers/CreateServerDialog.tsx +6 -1
  7. package/apps/agents-server/src/app/admin/servers/useCreateServerWizard.ts +13 -1
  8. package/apps/agents-server/src/app/agents/[agentName]/AgentChatWrapper.tsx +11 -2
  9. package/apps/agents-server/src/app/agents/[agentName]/AgentProfileChat.tsx +14 -5
  10. package/apps/agents-server/src/app/agents/[agentName]/book/BookEditorWrapper.tsx +7 -1
  11. package/apps/agents-server/src/app/agents/[agentName]/chat/CanonicalAgentChatSurface.tsx +11 -1
  12. package/apps/agents-server/src/app/agents/[agentName]/images/default-avatar.png/route.ts +6 -2
  13. package/apps/agents-server/src/app/api/health/route.ts +18 -0
  14. package/apps/agents-server/src/app/api/images/[filename]/route.ts +6 -2
  15. package/apps/agents-server/src/app/api/internal/agent-runner-limits/route.ts +51 -0
  16. package/apps/agents-server/src/app/api/upload/route.ts +48 -12
  17. package/apps/agents-server/src/app/layout.tsx +13 -0
  18. package/apps/agents-server/src/components/AgentProfile/AgentProfile.tsx +1 -4
  19. package/apps/agents-server/src/components/FileUploadAvailability/FileUploadAvailabilityContext.tsx +50 -0
  20. package/apps/agents-server/src/components/FileUploadAvailability/FileUploadUnavailableNotice.tsx +45 -0
  21. package/apps/agents-server/src/components/Header/Header.tsx +0 -11
  22. package/apps/agents-server/src/components/Header/useHeaderAgentMenus.tsx +0 -5
  23. package/apps/agents-server/src/components/LayoutWrapper/LayoutWrapper.tsx +85 -76
  24. package/apps/agents-server/src/components/NewAgentDialog/NewAgentDialog.tsx +7 -3
  25. package/apps/agents-server/src/components/NewAgentDialog/NewAgentWizardKnowledgeStep.tsx +6 -0
  26. package/apps/agents-server/src/components/NewAgentDialog/useNewAgentDialog.tsx +39 -16
  27. package/apps/agents-server/src/components/NewAgentDialog/useNewAgentWizardKnowledgeState.ts +8 -1
  28. package/apps/agents-server/src/constants/defaultAgentAvatarVisual.ts +1 -1
  29. package/apps/agents-server/src/constants/serverLimits.ts +22 -2
  30. package/apps/agents-server/src/database/migrations/2026-06-0200-default-agent-avatar-visual-octopus3d3.sql +16 -0
  31. package/apps/agents-server/src/database/seedDefaultAgents.ts +218 -0
  32. package/apps/agents-server/src/middleware.ts +2 -1
  33. package/apps/agents-server/src/tools/$provideCdnForServer.ts +114 -9
  34. package/apps/agents-server/src/utils/agentRouting/resolveAgentRouteTarget.ts +27 -4
  35. package/apps/agents-server/src/utils/defaultAgents/loadDefaultAgentBooks.ts +103 -0
  36. package/apps/agents-server/src/utils/knowledge/createInlineKnowledgeSourceUploader.ts +24 -5
  37. package/apps/agents-server/src/utils/serverLimits.ts +26 -1
  38. package/apps/agents-server/src/utils/serverManagement/createManagedServer/seedServerDefaultAgents.ts +1 -85
  39. package/apps/agents-server/src/utils/shareTargetPayloads.ts +20 -2
  40. package/apps/agents-server/src/utils/upload/fileUploadAvailability.ts +91 -0
  41. package/apps/agents-server/src/utils/upload/uploadFileToServer.ts +46 -2
  42. package/esm/apps/agents-server/src/constants/federatedAgentImport.d.ts +42 -0
  43. package/esm/apps/agents-server/src/constants/serverLimits.d.ts +207 -0
  44. package/esm/apps/agents-server/src/constants/toolUsageLimits.d.ts +55 -0
  45. package/esm/index.es.js +1109 -35
  46. package/esm/index.es.js.map +1 -1
  47. package/esm/scripts/run-agent-messages/main/AgentMessageFailureTracker.d.ts +27 -0
  48. package/esm/scripts/run-agent-messages/main/handleAgentWatchError.d.ts +4 -0
  49. package/esm/scripts/run-agent-messages/main/runAgentMessages.d.ts +1 -0
  50. package/esm/scripts/run-agent-messages/messages/moveAgentMessageToFailed.d.ts +17 -0
  51. package/esm/src/avatars/types/AvatarVisualDefinition.d.ts +1 -1
  52. package/esm/src/avatars/visuals/octopus3d3AvatarVisual.d.ts +7 -0
  53. package/esm/src/book-components/BookEditor/BookEditor.d.ts +5 -4
  54. package/esm/src/book-components/BookEditor/BookEditorTheme.d.ts +24 -0
  55. package/esm/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +1 -6
  56. package/esm/src/book-components/BookEditor/useBookEditorMonacoLifecycle.d.ts +1 -4
  57. package/esm/src/book-components/BookEditor/useBookEditorMonacoStyles.d.ts +2 -1
  58. package/esm/src/cli/cli-commands/agent-folder/agentProjectPaths.d.ts +6 -0
  59. package/esm/src/version.d.ts +1 -1
  60. package/package.json +1 -1
  61. package/src/avatars/types/AvatarVisualDefinition.ts +1 -0
  62. package/src/avatars/visuals/avatarVisualRegistry.ts +2 -0
  63. package/src/avatars/visuals/octopus3d3AvatarVisual.ts +902 -0
  64. package/src/book-components/BookEditor/BookEditor.tsx +10 -7
  65. package/src/book-components/BookEditor/BookEditorMonaco.tsx +3 -1
  66. package/src/book-components/BookEditor/BookEditorTheme.ts +32 -0
  67. package/src/book-components/BookEditor/useBookEditorMonacoLanguage.ts +12 -15
  68. package/src/book-components/BookEditor/useBookEditorMonacoLifecycle.ts +1 -5
  69. package/src/book-components/BookEditor/useBookEditorMonacoStyles.ts +2 -1
  70. package/src/cli/cli-commands/agent-folder/agentProjectPaths.ts +7 -0
  71. package/src/cli/cli-commands/agents-server/buildAgentsServer.ts +109 -9
  72. package/src/cli/cli-commands/agents-server/startAgentsServer.ts +132 -4
  73. package/src/other/templates/getTemplatesPipelineCollection.ts +690 -747
  74. package/src/utils/agents/resolveAgentAvatarImageUrl.ts +1 -1
  75. package/src/version.ts +2 -2
  76. package/src/versions.txt +2 -1
  77. package/umd/apps/agents-server/src/constants/federatedAgentImport.d.ts +42 -0
  78. package/umd/apps/agents-server/src/constants/serverLimits.d.ts +207 -0
  79. package/umd/apps/agents-server/src/constants/toolUsageLimits.d.ts +55 -0
  80. package/umd/index.umd.js +1109 -35
  81. package/umd/index.umd.js.map +1 -1
  82. package/umd/scripts/run-agent-messages/main/AgentMessageFailureTracker.d.ts +27 -0
  83. package/umd/scripts/run-agent-messages/main/handleAgentWatchError.d.ts +4 -0
  84. package/umd/scripts/run-agent-messages/main/runAgentMessages.d.ts +1 -0
  85. package/umd/scripts/run-agent-messages/messages/moveAgentMessageToFailed.d.ts +17 -0
  86. package/umd/src/avatars/types/AvatarVisualDefinition.d.ts +1 -1
  87. package/umd/src/avatars/visuals/octopus3d3AvatarVisual.d.ts +7 -0
  88. package/umd/src/book-components/BookEditor/BookEditor.d.ts +5 -4
  89. package/umd/src/book-components/BookEditor/BookEditorTheme.d.ts +24 -0
  90. package/umd/src/book-components/BookEditor/useBookEditorMonacoLanguage.d.ts +1 -6
  91. package/umd/src/book-components/BookEditor/useBookEditorMonacoLifecycle.d.ts +1 -4
  92. package/umd/src/book-components/BookEditor/useBookEditorMonacoStyles.d.ts +2 -1
  93. package/umd/src/cli/cli-commands/agent-folder/agentProjectPaths.d.ts +6 -0
  94. package/umd/src/version.d.ts +1 -1
  95. package/apps/agents-server/src/message-providers/email/_common/utils/parseEmailAddress.test.ts.todo +0 -108
  96. package/apps/agents-server/src/message-providers/email/_common/utils/parseEmailAddresses.test.ts.todo +0 -117
  97. package/apps/agents-server/src/message-providers/email/_common/utils/stringifyEmailAddress.test.ts.todo +0 -119
  98. package/apps/agents-server/src/message-providers/email/_common/utils/stringifyEmailAddresses.test.ts.todo +0 -74
  99. package/apps/agents-server/tests/e2e/authentication-and-navigation.spec.ts.todo +0 -178
  100. package/src/_packages/browser.index.ts +0 -31
  101. package/src/_packages/browser.readme.md +0 -43
  102. package/src/book-2.0/agent-source/parseAgentSourceWithCommitments.test.ts.todo +0 -265
  103. package/src/book-components/BookEditor/BookEditorMonaco.test.tsx.todo +0 -115
  104. package/src/book-components/Chat/utils/renderMarkdown.test.ts.tmp +0 -199
  105. package/src/collection/agent-collection/constructors/agent-collection-in-directory/AgentCollectionInDirectory.test.ts.todo +0 -131
  106. package/src/commands/_common/parseCommand.test.ts.todo +0 -48
  107. package/src/commitments/META_LINK/META_LINK.test.ts.todo +0 -75
  108. package/src/conversion/validation/pipelineStringToJson-errors.test.ts.todo +0 -33
  109. package/src/dialogs/simple-prompt/SimplePromptInterfaceTools.ts +0 -51
  110. package/src/executables/browsers/locateSafari.test.ts.tmp +0 -15
  111. package/src/execution/PromptbookFetch.test-type.ts +0 -14
  112. package/src/execution/createPipelineExecutor/00-createPipelineExecutor.test.ts.todo +0 -0
  113. package/src/execution/execution-report/executionReportJsonToString.test.ts.todo +0 -83
  114. package/src/execution/utils/usageToHuman.test.ts.todo +0 -80
  115. package/src/llm-providers/_common/register/$provideLlmToolsForTestingAndScriptsAndPlayground.ts +0 -76
  116. package/src/llm-providers/_common/utils/assertUniqueModels.ts +0 -27
  117. package/src/llm-providers/_multiple/playground/playground.ts +0 -141
  118. package/src/llm-providers/_multiple/playground/tsconfig.json +0 -19
  119. package/src/llm-providers/agent/playground/playground.ts +0 -190
  120. package/src/llm-providers/agent/playground/tsconfig.json +0 -19
  121. package/src/llm-providers/anthropic-claude/playground/playground.ts +0 -99
  122. package/src/llm-providers/anthropic-claude/playground/tsconfig.json +0 -19
  123. package/src/llm-providers/azure-openai/playground/playground.ts +0 -101
  124. package/src/llm-providers/azure-openai/playground/tsconfig.json +0 -19
  125. package/src/llm-providers/ollama/playground/playground.ts +0 -120
  126. package/src/llm-providers/ollama/playground/tsconfig.json +0 -19
  127. package/src/llm-providers/openai/playground/playground.ts +0 -406
  128. package/src/llm-providers/openai/playground/tsconfig.json +0 -19
  129. package/src/llm-providers/remote/playground/playground.ts +0 -144
  130. package/src/llm-providers/remote/playground/tsconfig.json +0 -19
  131. package/src/llm-providers/vercel/playground/playground.ts +0 -133
  132. package/src/llm-providers/vercel/playground/tsconfig.json +0 -19
  133. package/src/personas/preparePersona.test.ts.todo +0 -126
  134. package/src/playground/backup/_playground-boilerplate.ts.txt +0 -37
  135. package/src/playground/backup/playground-agent-os.txt +0 -62
  136. package/src/playground/backup/playground-brj-app.ts.txt +0 -302
  137. package/src/playground/backup/playground-browser-playwright.txt +0 -110
  138. package/src/playground/backup/playground-claude-mcp.txt +0 -43
  139. package/src/playground/backup/playground-document-conversion.txt +0 -84
  140. package/src/playground/backup/playground-glob.ts.txt +0 -42
  141. package/src/playground/backup/playground-mcp-server.txt +0 -1
  142. package/src/playground/backup/playground-openai-agent-kit.txt +0 -73
  143. package/src/playground/backup/playground-openai-function-calling.txt +0 -131
  144. package/src/playground/backup/playground-openai-streaming.ts.txt +0 -68
  145. package/src/playground/backup/playground-scrape-knowledge.txt +0 -65
  146. package/src/playground/backup/playground-scraperFetch.ts.txt +0 -44
  147. package/src/playground/backup/playground-using-openai-compatible-route-on-agents-server.ts.txt +0 -49
  148. package/src/playground/backup/playground-write-pavolhejny-bio.txt +0 -120
  149. package/src/playground/permanent/_boilerplate.ts +0 -54
  150. package/src/playground/permanent/agent-with-browser-playground.ts +0 -92
  151. package/src/playground/permanent/error-handling-playground.ts +0 -103
  152. package/src/playground/playground.ts +0 -36
  153. package/src/playground/tsconfig.json +0 -19
  154. package/src/scrapers/_boilerplate/BoilerplateScraper.test.ts.todo +0 -73
  155. package/src/scrapers/_boilerplate/playground/boilerplate-scraper-playground.ts +0 -79
  156. package/src/scrapers/_boilerplate/playground/tsconfig.json +0 -19
  157. package/src/scrapers/_common/utils/files/blobToDataurl.test.ts.todo +0 -17
  158. package/src/scrapers/_common/utils/files/dataurlToBlob.test.ts.todo +0 -52
  159. package/src/scrapers/_common/utils/files/isValidDataurl.test.ts.todo +0 -42
  160. package/src/scrapers/_common/utils/files/shorten.test.ts.todo +0 -13
  161. package/src/scrapers/document/playground/document-scraper-playground.ts +0 -80
  162. package/src/scrapers/document/playground/tsconfig.json +0 -19
  163. package/src/scrapers/document-legacy/playground/legacy-document-scraper-playground.ts +0 -80
  164. package/src/scrapers/document-legacy/playground/tsconfig.json +0 -19
  165. package/src/scrapers/markdown/playground/markdown-scraper-playground.ts +0 -74
  166. package/src/scrapers/markdown/playground/tsconfig.json +0 -19
  167. package/src/scrapers/markitdown/MarkitdownScraper.test.ts.todo +0 -132
  168. package/src/scrapers/markitdown/playground/markitdown-scraper-playground.ts +0 -91
  169. package/src/scrapers/markitdown/playground/tsconfig.json +0 -19
  170. package/src/scrapers/pdf/PdfScraper.test.ts.todo +0 -52
  171. package/src/scrapers/pdf/playground/pdf-scraper-playground.ts +0 -75
  172. package/src/scrapers/pdf/playground/tsconfig.json +0 -19
  173. package/src/scrapers/website/playground/tsconfig.json +0 -19
  174. package/src/scrapers/website/playground/website-scraper-playground.ts +0 -82
  175. package/src/storage/_common/PromptbookStorage.test-type.ts +0 -14
  176. package/src/storage/local-storage/getIndexedDbStorage.ts +0 -36
  177. package/src/storage/local-storage/getLocalStorage.ts +0 -33
  178. package/src/storage/local-storage/getSessionStorage.ts +0 -33
  179. package/src/storage/local-storage/utils/IndexedDbStorageOptions.ts +0 -16
  180. package/src/storage/local-storage/utils/makePromptbookStorageFromIndexedDb.ts +0 -58
  181. package/src/storage/local-storage/utils/makePromptbookStorageFromWebStorage.ts +0 -45
  182. package/src/transpilers/formatted-book-in-markdown/FormattedBookInMarkdownTranspiler.test.ts.todo +0 -35
  183. package/src/transpilers/openai-sdk/playground/playground.ts +0 -85
  184. package/src/transpilers/openai-sdk/playground/tmp/chatbot-openaisdk-1.js +0 -194
  185. package/src/transpilers/openai-sdk/playground/tmp/package.json +0 -3
  186. package/src/transpilers/openai-sdk/playground/tsconfig.json +0 -18
  187. package/src/utils/editable/utils/findUsableParameters.test.ts.todo +0 -43
  188. package/src/utils/editable/utils/stringifyPipelineJson.test.ts.todo +0 -38
  189. package/src/utils/markdown/prettifyMarkdown.test.ts.tmp +0 -42
  190. package/src/utils/serialization/serializeToPromptbookJavascript.test.ts.todo +0 -116
@@ -1,80 +0,0 @@
1
- // TODO: [🍓][🧞‍♂️] Uncomment this test after `usageToHuman` is working
2
-
3
- import { describe, expect, it } from '@jest/globals';
4
- import { spaceTrim } from 'spacetrim';
5
- import { ZERO_USAGE } from './usage-constants';
6
- import { usageToHuman } from './usageToHuman';
7
-
8
- describe('how usageToHuman works', () => {
9
- it('no use should return a meaningful report', () =>
10
- expect(usageToHuman(ZERO_USAGE)).toEqual(
11
- spaceTrim(`
12
- Usage:
13
- - Cost 0 USD
14
- - Saved 0 hours of human time
15
- `),
16
- ));
17
-
18
- it('should make report', () =>
19
- expect(
20
- usageToHuman({
21
- price: { value: 1 },
22
- input: {
23
- tokensCount: ZERO_VALUE,
24
- charactersCount: { value: 1 },
25
- wordsCount: { value: 20 },
26
- sentencesCount: { value: 3 },
27
- linesCount: { value: 4 },
28
- paragraphsCount: { value: 5 },
29
- pagesCount: { value: 6 },
30
- },
31
- output: {
32
- tokensCount: { value: 3000 },
33
- charactersCount: { value: 1 },
34
- wordsCount: { value: 20 },
35
- sentencesCount: { value: 3 },
36
- linesCount: { value: 4 },
37
- paragraphsCount: { value: 5 },
38
- pagesCount: { value: 6 },
39
- },
40
- }),
41
- ).toEqual(
42
- spaceTrim(`
43
- Usage:
44
- - Cost 1 USD
45
- - Saved 0.01 hours of human time
46
- `),
47
- ));
48
-
49
- it('should make report from uncertain usage', () =>
50
- expect(
51
- usageToHuman({
52
- price: { value: 1, isUncertain: true },
53
- input: {
54
- tokensCount: UNCERTAIN_ZERO_VALUE,
55
- charactersCount: { value: 1, isUncertain: true },
56
- wordsCount: { value: 3000, isUncertain: true },
57
- sentencesCount: { value: 3, isUncertain: true },
58
- linesCount: { value: 4, isUncertain: true },
59
- paragraphsCount: { value: 5, isUncertain: true },
60
- pagesCount: { value: 6, isUncertain: true },
61
- },
62
- output: {
63
- tokensCount: { value: 300, isUncertain: true },
64
- charactersCount: { value: 1, isUncertain: true },
65
- wordsCount: { value: 80000, isUncertain: true },
66
- sentencesCount: { value: 3, isUncertain: true },
67
- linesCount: { value: 4, isUncertain: true },
68
- paragraphsCount: { value: 5, isUncertain: true },
69
- pagesCount: { value: 6, isUncertain: true },
70
- },
71
- }),
72
- ).toEqual(
73
- spaceTrim(`
74
- Usage:
75
- - Cost approximately 1 USD
76
- - Saved approximately 33.58 hours of human time
77
-
78
- `),
79
- ));
80
- });
@@ -1,76 +0,0 @@
1
- import { join } from 'path';
2
- import { DEFAULT_EXECUTION_CACHE_DIRNAME, IS_COST_PREVENTED } from '../../../config';
3
- import { EnvironmentMismatchError } from '../../../errors/EnvironmentMismatchError';
4
- import type { LlmExecutionTools } from '../../../execution/LlmExecutionTools';
5
- import { $provideFilesystemForNode } from '../../../scrapers/_common/register/$provideFilesystemForNode';
6
- import { FileCacheStorage } from '../../../storage/file-cache-storage/FileCacheStorage';
7
- import { $isRunningInNode } from '../../../utils/environment/$isRunningInNode';
8
- import '../../../_packages/cli.index'; // <- Note: Really importing core index to register all the LLM providers
9
- import { cacheLlmTools } from '../utils/cache/cacheLlmTools';
10
- import { countUsage } from '../utils/count-total-usage/countUsage';
11
- import { limitTotalUsage } from '../utils/count-total-usage/limitTotalUsage';
12
- import type { LlmExecutionToolsWithTotalUsage } from '../utils/count-total-usage/LlmExecutionToolsWithTotalUsage';
13
- import { $provideLlmToolsFromEnv } from './$provideLlmToolsFromEnv';
14
- import type { CreateLlmToolsFromConfigurationOptions } from './createLlmToolsFromConfiguration';
15
-
16
- /**
17
- * Options for get Llm tools for testing and scripts and playground.
18
- */
19
- type GetLlmToolsForTestingAndScriptsAndPlaygroundOptions = CreateLlmToolsFromConfigurationOptions & {
20
- /**
21
- * Flag indicating whether the cache should be reloaded or reused
22
- * When set to true, the existing cache will not be used but thinks will be still saved to the cache
23
- *
24
- * @default false
25
- */
26
- isCacheReloaded?: boolean;
27
- };
28
-
29
- /**
30
- * Returns LLM tools for testing purposes
31
- *
32
- * Note: `$` is used to indicate that this function is not a pure function - it uses filesystem to access `.env` file
33
- *
34
- * @private within the repository - JUST FOR TESTS, SCRIPTS AND PLAYGROUND
35
- */
36
- export async function $provideLlmToolsForTestingAndScriptsAndPlayground(
37
- options?: GetLlmToolsForTestingAndScriptsAndPlaygroundOptions,
38
- ): Promise<LlmExecutionToolsWithTotalUsage> {
39
- if (!$isRunningInNode()) {
40
- throw new EnvironmentMismatchError(
41
- 'Function `$provideLlmToolsForTestingAndScriptsAndPlayground` works only in Node.js environment',
42
- );
43
- }
44
-
45
- const { isCacheReloaded = false, ...restOptions } = options ?? {};
46
-
47
- const llmTools: LlmExecutionTools = await $provideLlmToolsFromEnv({
48
- title: 'LLM Tools for testing, scripts and playground',
49
- ...restOptions,
50
- });
51
- const llmToolsWithUsage = !IS_COST_PREVENTED
52
- ? countUsage(llmTools)
53
- : // <- Note: for example here we don`t want the [🌯]
54
- limitTotalUsage(llmTools);
55
- // <- Note: `limitTotalUsage` will do everything as `countTotalUsage` and adds usage limit
56
- // <- Note: for example here we don`t want the [🌯]
57
-
58
- return cacheLlmTools(llmToolsWithUsage, {
59
- storage: new FileCacheStorage(
60
- { fs: $provideFilesystemForNode() },
61
- {
62
- rootFolderPath: join(
63
- process.cwd(),
64
- DEFAULT_EXECUTION_CACHE_DIRNAME,
65
- // <- TODO: [🦒] Allow to override (pass different value into the function)
66
- ),
67
- },
68
- ),
69
- isCacheReloaded: isCacheReloaded,
70
- });
71
- }
72
-
73
- // Note: [⚪] This should never be in any released package
74
- // TODO: [👷‍♂️] Write a comprehensive manual about the construction of LLM tools
75
- // TODO: This should be maybe not under `_common` but under `utils-internal` / `utils/internal`
76
- // TODO: [®] DRY Register logi
@@ -1,27 +0,0 @@
1
- import type { AvailableModel } from '../../../execution/AvailableModel';
2
-
3
- /**
4
- * Utility to assert that all models in the provided array have unique `modelName` values.
5
- *
6
- * This is internal utility for unit tests to ensure no duplicate model names exist.
7
- *
8
- * @private internal utility of unit tests
9
- */
10
- export function assertUniqueModels(models: ReadonlyArray<AvailableModel>) {
11
- const seen = new Map<string, boolean>();
12
- const duplicates: string[] = [];
13
- for (const model of models) {
14
- const value = model.modelName;
15
- if (typeof value !== 'string') continue;
16
- if (seen.has(value)) {
17
- duplicates.push(value);
18
- } else {
19
- seen.set(value, true);
20
- }
21
- }
22
- if (duplicates.length > 0) {
23
- throw new Error(`Duplicate model names found: ${duplicates.join(', ')}`);
24
- }
25
- }
26
-
27
- // Note: [⚪] This should never be in any released package
@@ -1,141 +0,0 @@
1
- #!/usr/bin/env ts-node
2
-
3
- import * as dotenv from 'dotenv';
4
-
5
- dotenv.config({ path: '.env' });
6
-
7
- import colors from 'colors'; // <- TODO: [🔶] Make system to put color and style to both node and browser
8
- import { embeddingVectorToString } from '../../../execution/embeddingVectorToString';
9
- import { usageToHuman } from '../../../execution/utils/usageToHuman';
10
- import { $provideScriptingForNode } from '../../../scrapers/_common/register/$provideScriptingForNode';
11
- import type { Prompt } from '../../../types/Prompt';
12
- import { keepUnused } from '../../../utils/organization/keepUnused';
13
- import { AnthropicClaudeExecutionTools } from '../../anthropic-claude/AnthropicClaudeExecutionTools';
14
- import { AzureOpenAiExecutionTools } from '../../azure-openai/AzureOpenAiExecutionTools';
15
- import { OpenAiExecutionTools } from '../../openai/OpenAiExecutionTools';
16
- import { joinLlmExecutionTools } from '../joinLlmExecutionTools';
17
-
18
- playground()
19
- .catch((error) => {
20
- console.error(colors.bgRed(error.name || 'NamelessError'));
21
- console.error(error);
22
- process.exit(1);
23
- })
24
- .then(() => {
25
- process.exit(0);
26
- });
27
-
28
- /**
29
- * Handles playground.
30
- */
31
- async function playground() {
32
- console.info(`🧸 Multiple LLMs Playground`);
33
-
34
- // Do here stuff you want to test
35
- //========================================>
36
-
37
- const tools = {
38
- llm: [
39
- new OpenAiExecutionTools(
40
- // <- TODO: [🧱] Implement in a functional (not new Class) way
41
- {
42
- isVerbose: true,
43
- userId: 'playground',
44
- apiKey: process.env.OPENAI_API_KEY!,
45
- },
46
- ),
47
- new AnthropicClaudeExecutionTools(
48
- // <- TODO: [🧱] Implement in a functional (not new Class) way
49
- {
50
- isVerbose: true,
51
- apiKey: process.env.ANTHROPIC_CLAUDE_API_KEY!,
52
- },
53
- ),
54
- new AzureOpenAiExecutionTools(
55
- // <- TODO: [🧱] Implement in a functional (not new Class) way
56
- {
57
- isVerbose: true,
58
- userId: 'playground',
59
- resourceName: process.env.AZUREOPENAI_RESOURCE_NAME!,
60
- deploymentName: process.env.AZUREOPENAI_DEPLOYMENT_NAME!,
61
- apiKey: process.env.AZUREOPENAI_API_KEY!,
62
- },
63
- ),
64
- // TODO: [🦻] Add langtail
65
- ],
66
- script: await $provideScriptingForNode({}),
67
- };
68
- const llmTools = joinLlmExecutionTools('Playground tools', ...tools.llm);
69
-
70
- keepUnused(llmTools);
71
- keepUnused(embeddingVectorToString);
72
- keepUnused(usageToHuman);
73
- keepUnused<Prompt>();
74
-
75
- /*/
76
- const models = await llmTools.listModels();
77
- console.info(llmTools.title, llmTools.description);
78
- console.info({ models });
79
- /**/
80
-
81
- /*/
82
- const chatPrompt = {
83
- title: 'Hello',
84
- parameters: {},
85
- content: `Hello, my name is Alice.`,
86
- modelRequirements: {
87
- // modelName: 'foo',
88
- modelVariant: 'CHAT',
89
- },
90
- } as const satisfies Prompt;
91
- const chatPromptResult = await llmTools.callChatModel(chatPrompt);
92
- console.info({ chatPromptResult });
93
- console.info(colors.cyan(usageToHuman(chatPromptResult.usage)));
94
- console.info(colors.bgBlue(' User: ') + colors.blue(chatPrompt.content));
95
- console.info(colors.bgGreen(' Completion: ') + colors.green(chatPromptResult.content));
96
- /**/
97
-
98
- /*/
99
- const completionPrompt = {
100
- title: 'Hello',
101
- parameters: {},
102
- content: `Hello, my name is Alice.`,
103
- modelRequirements: {
104
- modelVariant: 'COMPLETION',
105
- },
106
- } as const satisfies Prompt;
107
- const completionPromptResult = await llmTools.callCompletionModel(completionPrompt);
108
- console.info({ completionPromptResult });
109
- console.info(colors.cyan(usageToHuman(chatPromptResult.usage)));
110
- console.info(colors.green(completionPrompt.content + completionPromptResult.content));
111
- /**/
112
-
113
- /*/
114
- // TODO: Test Translations in playground
115
- /**/
116
-
117
- /*/
118
- const prompt = {
119
- title: 'Embedding Prompt',
120
- parameters: {},
121
- content: `Hello, my name is Alice.`,
122
- modelRequirements: {
123
- modelVariant: 'EMBEDDING',
124
- // modelName: 'text-embedding-ada-002',
125
- },
126
- } as const satisfies Prompt;
127
- const promptResult = await llmTools.callEmbeddingModel(prompt);
128
- console.info({ promptResult });
129
- console.info(colors.cyan(usageToHuman(chatPromptResult.usage)));
130
- console.info(colors.bgBlue(' User: ') + colors.blue(prompt.content));
131
- console.info(colors.bgGreen(' Embedding: ') + colors.green(embeddingVectorToString(promptResult.content)));
132
- /**/
133
-
134
- /*/
135
- // <- Note: [🤖] Test here new model variant if needed
136
- /**/
137
-
138
- //========================================/
139
- }
140
-
141
- // Note: [⚫] Code for playground [_multiple playground](src/llm-providers/_multiple/playground/playground.ts) should never be published in any package
@@ -1,19 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "esnext",
4
- "module": "commonjs",
5
- "downlevelIteration": true,
6
- "allowJs": true,
7
- "moduleResolution": "node",
8
- "forceConsistentCasingInFileNames": true,
9
- "noImplicitReturns": true,
10
- "noImplicitThis": true,
11
- "noImplicitAny": true,
12
- "strictNullChecks": true,
13
- "experimentalDecorators": true,
14
- "noUnusedLocals": false,
15
- "resolveJsonModule": true,
16
- "esModuleInterop": true
17
- },
18
- "exclude": ["node_modules"]
19
- }
@@ -1,190 +0,0 @@
1
- #!/usr/bin/env ts-node
2
-
3
- import * as dotenv from 'dotenv';
4
-
5
- dotenv.config({ path: '.env' });
6
-
7
- import colors from 'colors';
8
- import { join } from 'path';
9
- import * as $registrations from '../../../_packages/cli.index';
10
- import { getAllCommitmentsToolFunctionsForNode } from '../../../commitments/_common/getAllCommitmentsToolFunctionsForNode';
11
- import { DEFAULT_EXECUTION_CACHE_DIRNAME } from '../../../config';
12
- import { usageToHuman } from '../../../execution/utils/usageToHuman';
13
- import { book } from '../../../pipeline/book-notation';
14
- import { $provideFilesystemForNode } from '../../../scrapers/_common/register/$provideFilesystemForNode';
15
- import { JavascriptExecutionTools } from '../../../scripting/javascript/JavascriptExecutionTools';
16
- import { FileCacheStorage } from '../../../storage/file-cache-storage/FileCacheStorage';
17
- import type { ChatPrompt } from '../../../types/Prompt';
18
- import { $sideEffect } from '../../../utils/organization/$sideEffect';
19
- import { just } from '../../../utils/organization/just';
20
- import { keepImported } from '../../../utils/organization/keepImported';
21
- import { cacheLlmTools } from '../../_common/utils/cache/cacheLlmTools';
22
- import { OpenAiAgentKitExecutionTools } from '../../openai/OpenAiAgentKitExecutionTools';
23
- import { createAgentLlmExecutionTools } from '../createAgentLlmExecutionTools';
24
-
25
- $sideEffect($registrations); // <- Note: LLM Providers are registered by importing their registration files
26
-
27
- /**
28
- * Main function demonstrating AgentLlmExecutionTools usage
29
- */
30
- playground()
31
- .catch((error) => {
32
- console.error(colors.bgRed(error.name || 'NamelessError'));
33
- console.error(error);
34
- process.exit(1);
35
- })
36
- .then(() => {
37
- process.exit(0);
38
- });
39
-
40
- /**
41
- * Demo AgentLlmExecutionTools in a chat scenario
42
- */
43
- async function playground() {
44
- // Create underlying OpenAI tools
45
-
46
- const nonce = '(1)';
47
- const isVerbose = true;
48
-
49
- /*/
50
- const llmTools = await $provideLlmToolsFromEnv({
51
- title: 'LLM Tools for Agent Playground',
52
- });
53
- /**/
54
-
55
- /**/
56
- const llmTools = new OpenAiAgentKitExecutionTools({
57
- apiKey: process.env.OPENAI_API_KEY,
58
- executionTools: {
59
- script: new JavascriptExecutionTools({
60
- isVerbose,
61
- functions: getAllCommitmentsToolFunctionsForNode(),
62
- }),
63
- },
64
- isVerbose,
65
- });
66
- /**/
67
-
68
- /*/
69
- console.info(colors.bgBlue(`🤖 LLM Tools:`));
70
- console.info(colors.bgCyan(llmTools.title));
71
- console.info(colors.cyan(llmTools.description));
72
- /**/
73
-
74
- /*/
75
- // Test configuration
76
- console.info(colors.bgBlue(`🔧 Checking configuration of LLM tools...`));
77
- await llmTools.checkConfiguration();
78
- /**/
79
-
80
- /*/
81
- // List available models
82
- console.info(colors.bgBlue(`🔍 Listing available models of LLM tools...`));
83
- const llmToolsModels = await llmTools.listModels();
84
- console.info(`📊 Found ${colors.yellow(llmToolsModels.length.toString())} available models`);
85
- console.info(llmToolsModels.map((model) => ` - ${model.modelTitle}`).join('\n'));
86
- /**/
87
-
88
- // Create agent tools wrapping the OpenAI tools
89
- let agentTools = createAgentLlmExecutionTools({
90
- llmTools,
91
- agentSource: book`
92
- Testing time from agent playground
93
-
94
- FROM VOID
95
- PERSONA You are an assistant that can determine the current date and time. ${nonce}
96
- RULE Reply in language and date and time format as per the user's locale and language.
97
- RULE Prefer words instead of digits when expressing time, for example, say "half past three" instead of "3:30".
98
- USE TIME
99
-
100
- `,
101
- // agentSource: book`
102
- // Paul
103
- //
104
- // FROM VOID
105
- // RULE You are writing about news in AI and technology.
106
- // USE SEARCH
107
- //
108
- // `,
109
- // <- TODO: !!!! Test `USE BROWSER`
110
- });
111
-
112
- agentTools = just(agentTools);
113
- keepImported(cacheLlmTools, FileCacheStorage, $provideFilesystemForNode, join, DEFAULT_EXECUTION_CACHE_DIRNAME);
114
-
115
- /**/
116
- agentTools = cacheLlmTools(agentTools, {
117
- storage: new FileCacheStorage(
118
- { fs: $provideFilesystemForNode() },
119
- {
120
- rootFolderPath: join(
121
- process.cwd(),
122
- DEFAULT_EXECUTION_CACHE_DIRNAME,
123
- // <- TODO: [🦒] Allow to override (pass different value into the function)
124
- ),
125
- },
126
- ),
127
- // isCacheReloaded: isCacheReloaded,
128
- });
129
- /**/
130
-
131
- console.info(colors.bgBlue(`🧔 Agent Tools:`));
132
- console.info(colors.bgCyan(agentTools.title));
133
- console.info(colors.cyan(agentTools.description));
134
-
135
- // Test configuration
136
- console.info(colors.bgBlue(`🔧 Checking configuration of agent tools...`));
137
- await agentTools.checkConfiguration();
138
-
139
- // List available models
140
- console.info(colors.bgBlue(`🔍 Listing available models of agent tools...`));
141
- const models = await agentTools.listModels();
142
- console.info(`📊 Found ${colors.yellow(models.length.toString())} available models`);
143
- console.info(models.map((model) => ` - ${model.modelTitle}`).join('\n'));
144
-
145
- // Show the model requirements
146
- console.info(colors.bgBlue(`🔣 Model Requirements:`));
147
- const modelRequirements = await agentTools.getModelRequirements();
148
- console.info(modelRequirements);
149
-
150
- // Test chat interaction
151
- console.info(colors.bgBlue(`💬 Chatting with agent...`));
152
-
153
- const chatPrompt = {
154
- title: 'Test Chat',
155
- /*
156
- thread: [
157
- // <- TODO: !!! Maybe rename to `previousMessages`
158
- {
159
- // channel: 'PROMPTBOOK_CHAT',
160
- // id: 'msg1',
161
- sender: 'user', // <- TODO: [👥] Standardize to `role: 'USER' | 'ASSISTANT'
162
- content: 'Hello! Can you tell me a fun fact about TypeScript?',
163
- },
164
- {
165
- // channel: 'PROMPTBOOK_CHAT',
166
- // id: 'msg2',
167
- sender: 'assistant',
168
- content: 'TypeScript is a superset of JavaScript that adds static types.',
169
- },
170
- ],
171
- */
172
- content: 'Kolik je hodin?' + nonce,
173
- parameters: {},
174
- modelRequirements: {
175
- modelVariant: 'CHAT',
176
- },
177
- } satisfies ChatPrompt;
178
-
179
- const result = await agentTools.callChatModel(chatPrompt);
180
-
181
- console.info({ result });
182
- console.info(colors.cyan(usageToHuman(result.usage)));
183
- console.info(colors.bgBlue(' User: ') + '\n' + colors.blue(chatPrompt.content));
184
- console.info(colors.bgCyan(` ${agentTools.title}: `) + '\n' + colors.green(result.content));
185
- }
186
-
187
- // Note: [⚫] Code for playground [agent playground](src/llm-providers/agent/playground/playground.ts) should never be published in any package
188
- // TODO: [🧠] Add more complex agent scenarios
189
- // TODO: [🧠] Add parameter substitution demo
190
- // TODO: [🧠] Add multi-turn conversation demo
@@ -1,19 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "esnext",
4
- "module": "commonjs",
5
- "downlevelIteration": true,
6
- "allowJs": true,
7
- "moduleResolution": "node",
8
- "forceConsistentCasingInFileNames": true,
9
- "noImplicitReturns": true,
10
- "noImplicitThis": true,
11
- "noImplicitAny": true,
12
- "strictNullChecks": true,
13
- "experimentalDecorators": true,
14
- "noUnusedLocals": false,
15
- "resolveJsonModule": true,
16
- "esModuleInterop": true
17
- },
18
- "exclude": ["node_modules"]
19
- }
@@ -1,99 +0,0 @@
1
- #!/usr/bin/env ts-node
2
-
3
- import * as dotenv from 'dotenv';
4
-
5
- dotenv.config({ path: '.env' });
6
-
7
- import colors from 'colors'; // <- TODO: [🔶] Make system to put color and style to both node and browser
8
- import type { Usage } from '../../../execution/Usage';
9
- import { usageToHuman } from '../../../execution/utils/usageToHuman';
10
- import type { Prompt } from '../../../types/Prompt';
11
- import { keepUnused } from '../../../utils/organization/keepUnused';
12
- import { countUsage } from '../../_common/utils/count-total-usage/countUsage';
13
- import { createAnthropicClaudeExecutionTools } from '../createAnthropicClaudeExecutionTools';
14
-
15
- playground()
16
- .catch((error) => {
17
- console.error(colors.bgRed(error.name || 'NamelessError'));
18
- console.error(error);
19
- process.exit(1);
20
- })
21
- .then(() => {
22
- process.exit(0);
23
- });
24
-
25
- /**
26
- * Handles playground.
27
- */
28
- async function playground() {
29
- console.info(`🧸 Anthropic Claude Playground`);
30
-
31
- // Do here stuff you want to test
32
- //========================================>
33
-
34
- const anthropicClaudeExecutionTools = createAnthropicClaudeExecutionTools({
35
- // isProxied: true,
36
- // remoteServerUrl: DEFAULT_REMOTE_URL,
37
- // path: DEFAULT_REMOTE_URL_PATH, // <- [🧜‍♂️]
38
- isVerbose: true,
39
- apiKey: process.env.ANTHROPIC_CLAUDE_API_KEY!,
40
- });
41
-
42
- const toolsWithUsage = countUsage(anthropicClaudeExecutionTools);
43
-
44
- toolsWithUsage.spending().subscribe((usage: Usage) => {
45
- const wordCount = (usage?.input?.wordsCount?.value || 0) + (usage?.output?.wordsCount?.value || 0);
46
- console.log(`[💸] Spending ${wordCount} words`);
47
- });
48
-
49
- keepUnused(toolsWithUsage);
50
- keepUnused(anthropicClaudeExecutionTools);
51
- keepUnused(usageToHuman);
52
- keepUnused<Prompt>();
53
-
54
- /*/
55
- const models = await anthropicClaudeExecutionTools.listModels();
56
- console.info({ models });
57
- /**/
58
-
59
- /**/
60
- const chatPrompt = {
61
- title: 'Poem about Prague',
62
- parameters: {},
63
- content: `Write me something about Prague`,
64
- modelRequirements: {
65
- modelVariant: 'CHAT',
66
- // modelName: 'claude-3-5-sonnet-latest',
67
- // modelName: 'claude-3-7-sonnet-latest',
68
- modelName: 'claude-4-sonnet-20250514',
69
- // modelName: 'claude-4-opus-20250514',
70
- systemMessage: 'You are an assistant who only speaks in rhymes.',
71
- temperature: 1,
72
- },
73
- format: 'JSON',
74
- } as const satisfies Prompt;
75
- const chatPromptResult = await toolsWithUsage.callChatModel!(chatPrompt);
76
- console.info({ chatPromptResult });
77
- console.info(colors.cyan(usageToHuman(chatPromptResult.usage)));
78
- console.info(colors.bgBlue(' User: ') + colors.blue(chatPrompt.content));
79
- console.info(colors.bgGreen(' Chat: ') + colors.green(chatPromptResult.content));
80
- /**/
81
-
82
- /*/
83
- // TODO: Test Translations in playground
84
- /**/
85
-
86
- /*/
87
- // TODO: Test Embeddings in playground
88
- /**/
89
-
90
- /*/
91
- // <- Note: [🤖] Test here new model variant if needed
92
- /**/
93
-
94
- //========================================/
95
- }
96
-
97
- // Note: [⚫] Code for playground [anthropic-claude playground](src/llm-providers/anthropic-claude/playground/playground.ts) should never be published in any package
98
- // TODO: [main] !!3 Playground with WebGPT / Promptbook.studio anonymous server
99
- // TODO: [main] !!3 Test here that `systemMessage`, `temperature` and `seed` are working correctly
@@ -1,19 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "esnext",
4
- "module": "commonjs",
5
- "downlevelIteration": true,
6
- "allowJs": true,
7
- "moduleResolution": "node",
8
- "forceConsistentCasingInFileNames": true,
9
- "noImplicitReturns": true,
10
- "noImplicitThis": true,
11
- "noImplicitAny": true,
12
- "strictNullChecks": true,
13
- "experimentalDecorators": true,
14
- "noUnusedLocals": false,
15
- "resolveJsonModule": true,
16
- "esModuleInterop": true
17
- },
18
- "exclude": ["node_modules"]
19
- }