@webiny/api-core 0.0.0-unstable.7be00a75a9 → 0.0.0-unstable.9f53ea597d

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 (96) hide show
  1. package/createApiCore.d.ts +1 -1
  2. package/createApiCore.js +8 -4
  3. package/createApiCore.js.map +1 -1
  4. package/exports/api/security/api-key.d.ts +1 -0
  5. package/exports/api/security/api-key.js +1 -0
  6. package/exports/api.d.ts +1 -1
  7. package/exports/api.js +1 -1
  8. package/features/ai/Ai.d.ts +3 -1
  9. package/features/ai/Ai.js +39 -4
  10. package/features/ai/Ai.js.map +1 -1
  11. package/features/ai/AnthropicSdkFactory.js +8 -44
  12. package/features/ai/AnthropicSdkFactory.js.map +1 -1
  13. package/features/ai/OpenAiSdkFactory.js +4 -168
  14. package/features/ai/OpenAiSdkFactory.js.map +1 -1
  15. package/features/ai/TextExtractor/DefaultTextExtractor.d.ts +9 -0
  16. package/features/ai/TextExtractor/DefaultTextExtractor.js +28 -0
  17. package/features/ai/TextExtractor/DefaultTextExtractor.js.map +1 -0
  18. package/features/ai/TextExtractor/abstractions.d.ts +12 -0
  19. package/features/ai/TextExtractor/abstractions.js +5 -0
  20. package/features/ai/TextExtractor/abstractions.js.map +1 -0
  21. package/features/ai/TextExtractor/index.d.ts +3 -0
  22. package/features/ai/TextExtractor/index.js +2 -0
  23. package/features/ai/TextExtractor/parsers/docxParser.d.ts +1 -0
  24. package/features/ai/TextExtractor/parsers/docxParser.js +111 -0
  25. package/features/ai/TextExtractor/parsers/docxParser.js.map +1 -0
  26. package/features/ai/events.d.ts +59 -0
  27. package/features/ai/events.js +41 -0
  28. package/features/ai/events.js.map +1 -0
  29. package/features/ai/feature.js +6 -0
  30. package/features/ai/feature.js.map +1 -1
  31. package/features/ai/index.d.ts +6 -0
  32. package/features/ai/index.js +3 -0
  33. package/features/ai/toolPipeline/AiOutputToolRegistry.d.ts +11 -0
  34. package/features/ai/toolPipeline/AiOutputToolRegistry.js +31 -0
  35. package/features/ai/toolPipeline/AiOutputToolRegistry.js.map +1 -0
  36. package/features/ai/toolPipeline/AiToolPipelineRunner.d.ts +10 -0
  37. package/features/ai/toolPipeline/AiToolPipelineRunner.js +36 -0
  38. package/features/ai/toolPipeline/AiToolPipelineRunner.js.map +1 -0
  39. package/features/ai/toolPipeline/abstractions.d.ts +23 -0
  40. package/features/ai/toolPipeline/abstractions.js +7 -0
  41. package/features/ai/toolPipeline/abstractions.js.map +1 -0
  42. package/features/ai/toolPipeline/index.d.ts +2 -0
  43. package/features/ai/toolPipeline/index.js +1 -0
  44. package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.d.ts +1 -1
  45. package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.js.map +1 -1
  46. package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.d.ts +1 -3
  47. package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.js.map +1 -1
  48. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.d.ts +1 -1
  49. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js.map +1 -1
  50. package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.d.ts +1 -3
  51. package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.js.map +1 -1
  52. package/features/security/apiKeys/GetApiKeyByToken/abstractions.d.ts +1 -1
  53. package/features/security/apiKeys/GetApiKeyByToken/abstractions.js.map +1 -1
  54. package/features/security/apiKeys/feature.js +7 -2
  55. package/features/security/apiKeys/feature.js.map +1 -1
  56. package/features/security/apiKeys/shared/ApiKeyProvider.d.ts +3 -5
  57. package/features/security/apiKeys/shared/ApiKeyProvider.js +6 -21
  58. package/features/security/apiKeys/shared/ApiKeyProvider.js.map +1 -1
  59. package/features/security/apiKeys/shared/ApiKeysRepository.d.ts +1 -0
  60. package/features/security/apiKeys/shared/ApiKeysRepository.js +19 -4
  61. package/features/security/apiKeys/shared/ApiKeysRepository.js.map +1 -1
  62. package/features/security/apiKeys/shared/generateToken.d.ts +1 -1
  63. package/features/security/apiKeys/shared/generateToken.js.map +1 -1
  64. package/features/security/apiKeys/shared/types.d.ts +1 -1
  65. package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.d.ts +1 -1
  66. package/features/security/utils/getPermissionsFromRoles.d.ts +1 -1
  67. package/features/serviceDiscovery/ServiceDiscovery.d.ts +17 -0
  68. package/features/serviceDiscovery/ServiceDiscovery.js +22 -0
  69. package/features/serviceDiscovery/ServiceDiscovery.js.map +1 -0
  70. package/features/serviceDiscovery/__tests__/ServiceDiscovery.test.d.ts +1 -0
  71. package/features/serviceDiscovery/__tests__/ServiceDiscovery.test.js +111 -0
  72. package/features/serviceDiscovery/__tests__/ServiceDiscovery.test.js.map +1 -0
  73. package/features/serviceDiscovery/index.d.ts +3 -0
  74. package/features/serviceDiscovery/index.js +1 -0
  75. package/features/tenancy/CreateTenant/CreateTenantUseCase.d.ts +1 -1
  76. package/features/tenancy/InstallTenant/InstallTenantUseCase.d.ts +1 -1
  77. package/features/tenancy/TenantContext/TenantContext.js.map +1 -1
  78. package/features/tenancy/UpdateTenant/UpdateTenantUseCase.d.ts +2 -2
  79. package/features/users/CreateUser/decorators/CreateUserWithWcpIncrement.d.ts +1 -1
  80. package/features/wcp/WcpContext/WcpContext.d.ts +5 -0
  81. package/features/wcp/WcpContext/WcpContext.js +15 -0
  82. package/features/wcp/WcpContext/WcpContext.js.map +1 -1
  83. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.d.ts +21 -7
  84. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +27 -2
  85. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
  86. package/graphql/wcp/graphql.js +1 -0
  87. package/graphql/wcp/graphql.js.map +1 -1
  88. package/legacy/security/plugins/apiKeyAuthentication.d.ts +1 -1
  89. package/legacy/security/plugins/apiKeyAuthorization.d.ts +1 -1
  90. package/legacy/security/plugins/authenticateUsingCookie.d.ts +1 -1
  91. package/legacy/security/plugins/authenticateUsingHttpHeader.d.ts +1 -1
  92. package/legacy/wcp/LegacyWcpContext.d.ts +5 -0
  93. package/legacy/wcp/LegacyWcpContext.js +15 -0
  94. package/legacy/wcp/LegacyWcpContext.js.map +1 -1
  95. package/package.json +20 -22
  96. package/types/security.d.ts +1 -1
@@ -4,4 +4,4 @@ export interface ApiCoreConfig {
4
4
  storageOperations: ApiCoreStorageOperations;
5
5
  testProjectLicense?: DecryptedWcpProjectLicense;
6
6
  }
7
- export declare const createApiCore: (config: ApiCoreConfig) => (import("@webiny/handler-graphql/index.js").GraphQLSchemaPlugin<import("@webiny/api/types.js").Context> | import("@webiny/handler/index.js").RegisterExtensionPlugin<import("@webiny/handler/types.js").Context> | import("@webiny/api/index.js").ContextPlugin<import("~/types/core.js").ApiCoreContext> | import("@webiny/api/index.js").ContextPlugin<import("~/types/core.js").ApiCoreContext>[])[];
7
+ export declare const createApiCore: (config: ApiCoreConfig) => (import("@webiny/api/index.js").ContextPlugin<import("~/types/core.js").ApiCoreContext>[] | import("@webiny/api/index.js").ContextPlugin<import("~/types/core.js").ApiCoreContext> | import("@webiny/handler-graphql/index.js").GraphQLSchemaPlugin<import("@webiny/api/types.js").Context> | import("@webiny/handler/index.js").RegisterExtensionPlugin<import("@webiny/handler/types.js").Context>)[];
package/createApiCore.js CHANGED
@@ -5,10 +5,13 @@ import { createSecurityContext } from "./legacy/security/createSecurityContext.j
5
5
  import { createAdminUsersContext } from "./legacy/users/createAdminUsersContext.js";
6
6
  import { createTenancyContext } from "./legacy/tenancy/createTenancyContext.js";
7
7
  import { createSystemGraphQL } from "./graphql/system/createSystemGraphQL.js";
8
- const createApiCore = (config)=>[
9
- createRegisterExtensionPlugin((context)=>{
10
- ApiCoreFeature.register(context.container, config.storageOperations);
11
- }),
8
+ const createApiCore = (config)=>{
9
+ const plugin = createRegisterExtensionPlugin((context)=>{
10
+ ApiCoreFeature.register(context.container, config.storageOperations);
11
+ });
12
+ plugin.name = "apiCore.extension";
13
+ return [
14
+ plugin,
12
15
  createWcpContext({
13
16
  testProjectLicense: config.testProjectLicense
14
17
  }),
@@ -17,6 +20,7 @@ const createApiCore = (config)=>[
17
20
  createAdminUsersContext(),
18
21
  createSystemGraphQL()
19
22
  ];
23
+ };
20
24
  export { createApiCore };
21
25
 
22
26
  //# sourceMappingURL=createApiCore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createApiCore.js","sources":["../src/createApiCore.ts"],"sourcesContent":["import { createRegisterExtensionPlugin } from \"@webiny/handler/plugins/RegisterExtensionPlugin.js\";\nimport { ApiCoreFeature } from \"./ApiCoreFeature.js\";\nimport type { DecryptedWcpProjectLicense } from \"@webiny/wcp/types.js\";\nimport { createWcpContext } from \"~/legacy/wcp/context.js\";\nimport { createSecurityContext } from \"~/legacy/security/createSecurityContext.js\";\nimport { createAdminUsersContext } from \"~/legacy/users/createAdminUsersContext.js\";\nimport { createTenancyContext } from \"~/legacy/tenancy/createTenancyContext.js\";\nimport { createSystemGraphQL } from \"~/graphql/system/createSystemGraphQL.js\";\nimport type { ApiCoreStorageOperations } from \"~/types/core.js\";\n\nexport interface ApiCoreConfig {\n storageOperations: ApiCoreStorageOperations;\n testProjectLicense?: DecryptedWcpProjectLicense;\n}\n\nexport const createApiCore = (config: ApiCoreConfig) => {\n return [\n createRegisterExtensionPlugin(context => {\n ApiCoreFeature.register(context.container, config.storageOperations);\n }),\n createWcpContext({ testProjectLicense: config.testProjectLicense }),\n createTenancyContext(),\n createSecurityContext(),\n createAdminUsersContext(),\n createSystemGraphQL()\n ];\n};\n"],"names":["createApiCore","config","createRegisterExtensionPlugin","context","ApiCoreFeature","createWcpContext","createTenancyContext","createSecurityContext","createAdminUsersContext","createSystemGraphQL"],"mappings":";;;;;;;AAeO,MAAMA,gBAAgB,CAACC,SACnB;QACHC,8BAA8BC,CAAAA;YAC1BC,eAAe,QAAQ,CAACD,QAAQ,SAAS,EAAEF,OAAO,iBAAiB;QACvE;QACAI,iBAAiB;YAAE,oBAAoBJ,OAAO,kBAAkB;QAAC;QACjEK;QACAC;QACAC;QACAC;KACH"}
1
+ {"version":3,"file":"createApiCore.js","sources":["../src/createApiCore.ts"],"sourcesContent":["import { createRegisterExtensionPlugin } from \"@webiny/handler/plugins/RegisterExtensionPlugin.js\";\nimport { ApiCoreFeature } from \"./ApiCoreFeature.js\";\nimport type { DecryptedWcpProjectLicense } from \"@webiny/wcp/types.js\";\nimport { createWcpContext } from \"~/legacy/wcp/context.js\";\nimport { createSecurityContext } from \"~/legacy/security/createSecurityContext.js\";\nimport { createAdminUsersContext } from \"~/legacy/users/createAdminUsersContext.js\";\nimport { createTenancyContext } from \"~/legacy/tenancy/createTenancyContext.js\";\nimport { createSystemGraphQL } from \"~/graphql/system/createSystemGraphQL.js\";\nimport type { ApiCoreStorageOperations } from \"~/types/core.js\";\n\nexport interface ApiCoreConfig {\n storageOperations: ApiCoreStorageOperations;\n testProjectLicense?: DecryptedWcpProjectLicense;\n}\n\nexport const createApiCore = (config: ApiCoreConfig) => {\n const plugin = createRegisterExtensionPlugin(context => {\n ApiCoreFeature.register(context.container, config.storageOperations);\n });\n plugin.name = \"apiCore.extension\";\n\n return [\n plugin,\n createWcpContext({ testProjectLicense: config.testProjectLicense }),\n createTenancyContext(),\n createSecurityContext(),\n createAdminUsersContext(),\n createSystemGraphQL()\n ];\n};\n"],"names":["createApiCore","config","plugin","createRegisterExtensionPlugin","context","ApiCoreFeature","createWcpContext","createTenancyContext","createSecurityContext","createAdminUsersContext","createSystemGraphQL"],"mappings":";;;;;;;AAeO,MAAMA,gBAAgB,CAACC;IAC1B,MAAMC,SAASC,8BAA8BC,CAAAA;QACzCC,eAAe,QAAQ,CAACD,QAAQ,SAAS,EAAEH,OAAO,iBAAiB;IACvE;IACAC,OAAO,IAAI,GAAG;IAEd,OAAO;QACHA;QACAI,iBAAiB;YAAE,oBAAoBL,OAAO,kBAAkB;QAAC;QACjEM;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -2,6 +2,7 @@ export { ApiKeyAfterCreateEventHandler, ApiKeyBeforeCreateEventHandler, CreateAp
2
2
  export { ApiKeyAfterDeleteEventHandler, ApiKeyBeforeDeleteEventHandler, DeleteApiKeyUseCase } from "../../../features/security/apiKeys/DeleteApiKey/index.js";
3
3
  export { GetApiKeyUseCase } from "../../../features/security/apiKeys/GetApiKey/index.js";
4
4
  export { GetApiKeyByTokenUseCase } from "../../../features/security/apiKeys/GetApiKeyByToken/index.js";
5
+ export { GetApiKeyBySlugUseCase } from "../../../features/security/apiKeys/GetApiKeyBySlug/index.js";
5
6
  export { ListApiKeysUseCase } from "../../../features/security/apiKeys/ListApiKeys/index.js";
6
7
  export { ApiKeyAfterUpdateEventHandler, ApiKeyBeforeUpdateEventHandler, UpdateApiKeyUseCase } from "../../../features/security/apiKeys/UpdateApiKey/index.js";
7
8
  export { ApiKeyFactory } from "../../../features/security/apiKeys/shared/abstractions.js";
@@ -2,6 +2,7 @@ export { ApiKeyAfterCreateEventHandler, ApiKeyBeforeCreateEventHandler, CreateAp
2
2
  export { ApiKeyAfterDeleteEventHandler, ApiKeyBeforeDeleteEventHandler, DeleteApiKeyUseCase } from "../../../features/security/apiKeys/DeleteApiKey/index.js";
3
3
  export { GetApiKeyUseCase } from "../../../features/security/apiKeys/GetApiKey/index.js";
4
4
  export { GetApiKeyByTokenUseCase } from "../../../features/security/apiKeys/GetApiKeyByToken/index.js";
5
+ export { GetApiKeyBySlugUseCase } from "../../../features/security/apiKeys/GetApiKeyBySlug/index.js";
5
6
  export { ListApiKeysUseCase } from "../../../features/security/apiKeys/ListApiKeys/index.js";
6
7
  export { ApiKeyAfterUpdateEventHandler, ApiKeyBeforeUpdateEventHandler, UpdateApiKeyUseCase } from "../../../features/security/apiKeys/UpdateApiKey/index.js";
7
8
  export { ApiKeyFactory } from "../../../features/security/apiKeys/shared/abstractions.js";
package/exports/api.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { AiSdk, AiSdkFactory, AiConnectionFactory, Ai } from "../features/ai/index.js";
1
+ export { AiSdk, AiSdkFactory, AiSdkTool, AiConnectionFactory, Ai } from "../features/ai/index.js";
2
2
  export type { IAiConnection, IAiConnectionInline } from "../features/ai/index.js";
3
3
  export { Logger } from "../features/logger/index.js";
4
4
  export { Encryption } from "../features/encryption/index.js";
package/exports/api.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Ai, AiConnectionFactory, AiSdk, AiSdkFactory } from "../features/ai/index.js";
1
+ export { Ai, AiConnectionFactory, AiSdk, AiSdkFactory, AiSdkTool } from "../features/ai/index.js";
2
2
  export { Logger } from "../features/logger/index.js";
3
3
  export { Encryption } from "../features/encryption/index.js";
4
4
  export { BuildParam, BuildParams } from "../features/buildParams/index.js";
@@ -6,12 +6,14 @@ import { AiConnectionFactory } from "./abstractions.js";
6
6
  import type { AiGenerateTextParams, AiModel } from "./abstractions.js";
7
7
  import type { AiStreamTextParams } from "./abstractions.js";
8
8
  import type { IAiConnectionInline } from "./abstractions.js";
9
+ import { EventPublisher } from "../../features/eventPublisher/index.js";
9
10
  declare class AiImpl implements AiAbstraction.Interface {
10
11
  private readonly sdkFactories;
11
12
  private readonly connectionFactories;
13
+ private readonly eventPublisher;
12
14
  private sdkCache;
13
15
  private resolvedConnections;
14
- constructor(sdkFactories: AiSdkFactory.Interface[], connectionFactories: AiConnectionFactory.Interface[]);
16
+ constructor(sdkFactories: AiSdkFactory.Interface[], connectionFactories: AiConnectionFactory.Interface[], eventPublisher: EventPublisher.Interface);
15
17
  generateText(params: AiGenerateTextParams): ReturnType<typeof generateText>;
16
18
  streamText(params: AiStreamTextParams): Promise<ReturnType<typeof streamText>>;
17
19
  listModels(): Promise<AiModel[]>;
package/features/ai/Ai.js CHANGED
@@ -1,6 +1,9 @@
1
1
  import { createImplementation } from "@webiny/feature/api";
2
2
  import { generateText, streamText } from "ai";
3
3
  import { Ai, AiConnectionFactory, AiSdkFactory } from "./abstractions.js";
4
+ import { mdbid } from "@webiny/utils/mdbid.js";
5
+ import { EventPublisher } from "../eventPublisher/index.js";
6
+ import { AiAfterGenerateTextEvent, AiBeforeGenerateTextEvent, AiBeforeStreamTextEvent, AiGenerateTextErrorEvent } from "./events.js";
4
7
  function toAiModel(factory, modelId, modelName) {
5
8
  return {
6
9
  providerId: factory.id,
@@ -10,22 +13,53 @@ function toAiModel(factory, modelId, modelName) {
10
13
  };
11
14
  }
12
15
  class AiImpl {
13
- constructor(sdkFactories, connectionFactories){
16
+ constructor(sdkFactories, connectionFactories, eventPublisher){
14
17
  this.sdkFactories = sdkFactories;
15
18
  this.connectionFactories = connectionFactories;
19
+ this.eventPublisher = eventPublisher;
16
20
  this.sdkCache = new Map();
17
21
  this.resolvedConnections = null;
18
22
  }
19
- generateText(params) {
23
+ async generateText(params) {
20
24
  const { model, connection, ...rest } = params;
21
- return this.resolveLanguageModel(model, connection).then((resolvedModel)=>generateText({
25
+ const resolvedModel = await this.resolveLanguageModel(model, connection);
26
+ const requestId = mdbid();
27
+ await this.eventPublisher.publish(new AiBeforeGenerateTextEvent({
28
+ requestId,
29
+ params
30
+ }));
31
+ const start = performance.now();
32
+ try {
33
+ const result = await generateText({
22
34
  model: resolvedModel,
23
35
  ...rest
36
+ });
37
+ const duration = performance.now() - start;
38
+ await this.eventPublisher.publish(new AiAfterGenerateTextEvent({
39
+ requestId,
40
+ params,
41
+ result,
42
+ duration
43
+ }));
44
+ return result;
45
+ } catch (err) {
46
+ const duration = performance.now() - start;
47
+ const error = err instanceof Error ? err : new Error(String(err));
48
+ await this.eventPublisher.publish(new AiGenerateTextErrorEvent({
49
+ requestId,
50
+ params,
51
+ error,
52
+ duration
24
53
  }));
54
+ throw err;
55
+ }
25
56
  }
26
57
  async streamText(params) {
27
58
  const { model, connection, ...rest } = params;
28
59
  const resolvedModel = await this.resolveLanguageModel(model, connection);
60
+ await this.eventPublisher.publish(new AiBeforeStreamTextEvent({
61
+ params
62
+ }));
29
63
  return streamText({
30
64
  model: resolvedModel,
31
65
  ...rest
@@ -108,7 +142,8 @@ const Ai_Ai = createImplementation({
108
142
  {
109
143
  multiple: true
110
144
  }
111
- ]
145
+ ],
146
+ EventPublisher
112
147
  ]
113
148
  });
114
149
  export { Ai_Ai as Ai };
@@ -1 +1 @@
1
- {"version":3,"file":"features/ai/Ai.js","sources":["../../../src/features/ai/Ai.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { generateText } from \"ai\";\nimport { streamText } from \"ai\";\nimport { Ai as AiAbstraction } from \"./abstractions.js\";\nimport { AiSdkFactory } from \"./abstractions.js\";\nimport { AiConnectionFactory } from \"./abstractions.js\";\nimport type { AiGenerateTextParams, AiModel, IAiSdkFactory } from \"./abstractions.js\";\nimport type { AiStreamTextParams } from \"./abstractions.js\";\nimport type { IAiSdk } from \"./abstractions.js\";\nimport type { IAiConnection } from \"./abstractions.js\";\nimport type { IAiConnectionInline } from \"./abstractions.js\";\nimport type { LanguageModel } from \"ai\";\n\nfunction toAiModel(factory: IAiSdkFactory, modelId: string, modelName: string): AiModel {\n return {\n providerId: factory.id,\n providerName: factory.name,\n modelId,\n modelName\n };\n}\n\nclass AiImpl implements AiAbstraction.Interface {\n private sdkCache = new Map<string, IAiSdk>();\n private resolvedConnections: IAiConnection[] | null = null;\n\n constructor(\n private readonly sdkFactories: AiSdkFactory.Interface[],\n private readonly connectionFactories: AiConnectionFactory.Interface[]\n ) {}\n\n generateText(params: AiGenerateTextParams): ReturnType<typeof generateText> {\n const { model, connection, ...rest } = params;\n return this.resolveLanguageModel(model, connection).then(resolvedModel => {\n // Cast required: spreading the discriminated Prompt union loses its narrowing.\n return generateText({ model: resolvedModel, ...rest } as Parameters<\n typeof generateText\n >[0]);\n });\n }\n\n async streamText(params: AiStreamTextParams): Promise<ReturnType<typeof streamText>> {\n const { model, connection, ...rest } = params;\n const resolvedModel = await this.resolveLanguageModel(model, connection);\n // Cast required: spreading the discriminated Prompt union loses its narrowing.\n return streamText({ model: resolvedModel, ...rest } as Parameters<typeof streamText>[0]);\n }\n\n listModels(): Promise<AiModel[]> {\n return Promise.resolve(\n this.sdkFactories.flatMap(factory =>\n factory.models.map(m => toAiModel(factory, m.id, m.name))\n )\n );\n }\n\n async listModelsByConnections(): Promise<AiModel[]> {\n const connections = await this.getConnections();\n return connections.flatMap(conn => {\n const factory = this.sdkFactories.find(f => f.id === conn.sdkName);\n if (!factory) {\n return [];\n }\n return factory.models.map(m => toAiModel(factory, m.id, m.name));\n });\n }\n\n async listModelsByConnection(connection: string | IAiConnectionInline): Promise<AiModel[]> {\n const conn = await this.resolveConnection(undefined, connection);\n const factory = this.sdkFactories.find(f => f.id === conn.sdkName);\n if (!factory) {\n return [];\n }\n return factory.models.map(m => toAiModel(factory, m.id, m.name));\n }\n\n private async resolveLanguageModel(\n modelId: string,\n connection?: string | IAiConnectionInline\n ): Promise<LanguageModel> {\n const slashIndex = modelId.indexOf(\"/\");\n if (slashIndex === -1) {\n throw new Error(\n `Invalid model ID \"${modelId}\". Expected format: \"<providerId>/<modelId>\" (e.g. \"openai/gpt-4o\").`\n );\n }\n\n const providerId = modelId.slice(0, slashIndex);\n const modelName = modelId.slice(slashIndex + 1);\n\n const conn = await this.resolveConnection(providerId, connection);\n const sdk = await this.getSdk(conn);\n return sdk.languageModel(modelName);\n }\n\n private async getConnections(): Promise<IAiConnection[]> {\n if (!this.resolvedConnections) {\n this.resolvedConnections = await Promise.all(\n this.connectionFactories.map(f => f.execute())\n );\n }\n return this.resolvedConnections;\n }\n\n private async resolveConnection(\n providerId: string | undefined,\n connection?: string | IAiConnectionInline\n ): Promise<IAiConnectionInline> {\n if (typeof connection === \"object\") {\n return connection;\n }\n\n const connections = await this.getConnections();\n\n if (typeof connection === \"string\") {\n const found = connections.find(c => c.id === connection);\n if (!found) {\n const known = connections.map(c => `\"${c.id}\"`).join(\", \");\n throw new Error(\n `Unknown AI connection \"${connection}\". Registered connections: ${known}.`\n );\n }\n return found;\n }\n\n const found = connections.find(c => c.sdkName === providerId);\n if (!found) {\n const known = connections.map(c => `\"${c.id}\" (${c.sdkName})`).join(\", \");\n throw new Error(\n `No AI connection found for provider \"${providerId}\". Registered connections: ${known}.`\n );\n }\n return found;\n }\n\n private async getSdk(connection: IAiConnectionInline): Promise<IAiSdk> {\n const cacheKey =\n \"id\" in connection\n ? (connection as IAiConnection).id\n : `${connection.sdkName}:${connection.apiKey ?? \"__env__\"}`;\n\n const cached = this.sdkCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const factory = this.sdkFactories.find(f => f.id === connection.sdkName);\n if (!factory) {\n const known = this.sdkFactories.map(f => `\"${f.id}\"`).join(\", \");\n throw new Error(\n `No AI SDK factory found for \"${connection.sdkName}\". Registered factories: ${known}.`\n );\n }\n\n const sdk = await factory.execute(connection.apiKey);\n this.sdkCache.set(cacheKey, sdk);\n return sdk;\n }\n}\n\nexport const Ai = createImplementation({\n abstraction: AiAbstraction,\n implementation: AiImpl,\n dependencies: [\n [AiSdkFactory, { multiple: true }],\n [AiConnectionFactory, { multiple: true }]\n ]\n});\n"],"names":["toAiModel","factory","modelId","modelName","AiImpl","sdkFactories","connectionFactories","Map","params","model","connection","rest","resolvedModel","generateText","streamText","Promise","m","connections","conn","f","undefined","slashIndex","Error","providerId","sdk","found","c","known","cacheKey","cached","Ai","createImplementation","AiAbstraction","AiSdkFactory","AiConnectionFactory"],"mappings":";;;AAaA,SAASA,UAAUC,OAAsB,EAAEC,OAAe,EAAEC,SAAiB;IACzE,OAAO;QACH,YAAYF,QAAQ,EAAE;QACtB,cAAcA,QAAQ,IAAI;QAC1BC;QACAC;IACJ;AACJ;AAEA,MAAMC;IAIF,YACqBC,YAAsC,EACtCC,mBAAoD,CACvE;aAFmBD,YAAY,GAAZA;aACAC,mBAAmB,GAAnBA;aALb,QAAQ,GAAG,IAAIC;aACf,mBAAmB,GAA2B;IAKnD;IAEH,aAAaC,MAA4B,EAAmC;QACxE,MAAM,EAAEC,KAAK,EAAEC,UAAU,EAAE,GAAGC,MAAM,GAAGH;QACvC,OAAO,IAAI,CAAC,oBAAoB,CAACC,OAAOC,YAAY,IAAI,CAACE,CAAAA,gBAE9CC,aAAa;gBAAE,OAAOD;gBAAe,GAAGD,IAAI;YAAC;IAI5D;IAEA,MAAM,WAAWH,MAA0B,EAA0C;QACjF,MAAM,EAAEC,KAAK,EAAEC,UAAU,EAAE,GAAGC,MAAM,GAAGH;QACvC,MAAMI,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAACH,OAAOC;QAE7D,OAAOI,WAAW;YAAE,OAAOF;YAAe,GAAGD,IAAI;QAAC;IACtD;IAEA,aAAiC;QAC7B,OAAOI,QAAQ,OAAO,CAClB,IAAI,CAAC,YAAY,CAAC,OAAO,CAACd,CAAAA,UACtBA,QAAQ,MAAM,CAAC,GAAG,CAACe,CAAAA,IAAKhB,UAAUC,SAASe,EAAE,EAAE,EAAEA,EAAE,IAAI;IAGnE;IAEA,MAAM,0BAA8C;QAChD,MAAMC,cAAc,MAAM,IAAI,CAAC,cAAc;QAC7C,OAAOA,YAAY,OAAO,CAACC,CAAAA;YACvB,MAAMjB,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAACkB,CAAAA,IAAKA,EAAE,EAAE,KAAKD,KAAK,OAAO;YACjE,IAAI,CAACjB,SACD,OAAO,EAAE;YAEb,OAAOA,QAAQ,MAAM,CAAC,GAAG,CAACe,CAAAA,IAAKhB,UAAUC,SAASe,EAAE,EAAE,EAAEA,EAAE,IAAI;QAClE;IACJ;IAEA,MAAM,uBAAuBN,UAAwC,EAAsB;QACvF,MAAMQ,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAACE,QAAWV;QACrD,MAAMT,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAACkB,CAAAA,IAAKA,EAAE,EAAE,KAAKD,KAAK,OAAO;QACjE,IAAI,CAACjB,SACD,OAAO,EAAE;QAEb,OAAOA,QAAQ,MAAM,CAAC,GAAG,CAACe,CAAAA,IAAKhB,UAAUC,SAASe,EAAE,EAAE,EAAEA,EAAE,IAAI;IAClE;IAEA,MAAc,qBACVd,OAAe,EACfQ,UAAyC,EACnB;QACtB,MAAMW,aAAanB,QAAQ,OAAO,CAAC;QACnC,IAAImB,AAAe,OAAfA,YACA,MAAM,IAAIC,MACN,CAAC,kBAAkB,EAAEpB,QAAQ,oEAAoE,CAAC;QAI1G,MAAMqB,aAAarB,QAAQ,KAAK,CAAC,GAAGmB;QACpC,MAAMlB,YAAYD,QAAQ,KAAK,CAACmB,aAAa;QAE7C,MAAMH,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAACK,YAAYb;QACtD,MAAMc,MAAM,MAAM,IAAI,CAAC,MAAM,CAACN;QAC9B,OAAOM,IAAI,aAAa,CAACrB;IAC7B;IAEA,MAAc,iBAA2C;QACrD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EACzB,IAAI,CAAC,mBAAmB,GAAG,MAAMY,QAAQ,GAAG,CACxC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAACI,CAAAA,IAAKA,EAAE,OAAO;QAGnD,OAAO,IAAI,CAAC,mBAAmB;IACnC;IAEA,MAAc,kBACVI,UAA8B,EAC9Bb,UAAyC,EACb;QAC5B,IAAI,AAAsB,YAAtB,OAAOA,YACP,OAAOA;QAGX,MAAMO,cAAc,MAAM,IAAI,CAAC,cAAc;QAE7C,IAAI,AAAsB,YAAtB,OAAOP,YAAyB;YAChC,MAAMe,QAAQR,YAAY,IAAI,CAACS,CAAAA,IAAKA,EAAE,EAAE,KAAKhB;YAC7C,IAAI,CAACe,OAAO;gBACR,MAAME,QAAQV,YAAY,GAAG,CAACS,CAAAA,IAAK,CAAC,CAAC,EAAEA,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;gBACrD,MAAM,IAAIJ,MACN,CAAC,uBAAuB,EAAEZ,WAAW,2BAA2B,EAAEiB,MAAM,CAAC,CAAC;YAElF;YACA,OAAOF;QACX;QAEA,MAAMA,QAAQR,YAAY,IAAI,CAACS,CAAAA,IAAKA,EAAE,OAAO,KAAKH;QAClD,IAAI,CAACE,OAAO;YACR,MAAME,QAAQV,YAAY,GAAG,CAACS,CAAAA,IAAK,CAAC,CAAC,EAAEA,EAAE,EAAE,CAAC,GAAG,EAAEA,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YACpE,MAAM,IAAIJ,MACN,CAAC,qCAAqC,EAAEC,WAAW,2BAA2B,EAAEI,MAAM,CAAC,CAAC;QAEhG;QACA,OAAOF;IACX;IAEA,MAAc,OAAOf,UAA+B,EAAmB;QACnE,MAAMkB,WACF,QAAQlB,aACDA,WAA6B,EAAE,GAChC,GAAGA,WAAW,OAAO,CAAC,CAAC,EAAEA,WAAW,MAAM,IAAI,WAAW;QAEnE,MAAMmB,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACD;QACjC,IAAIC,QACA,OAAOA;QAGX,MAAM5B,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAACkB,CAAAA,IAAKA,EAAE,EAAE,KAAKT,WAAW,OAAO;QACvE,IAAI,CAACT,SAAS;YACV,MAAM0B,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAACR,CAAAA,IAAK,CAAC,CAAC,EAAEA,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAC3D,MAAM,IAAIG,MACN,CAAC,6BAA6B,EAAEZ,WAAW,OAAO,CAAC,yBAAyB,EAAEiB,MAAM,CAAC,CAAC;QAE9F;QAEA,MAAMH,MAAM,MAAMvB,QAAQ,OAAO,CAACS,WAAW,MAAM;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACkB,UAAUJ;QAC5B,OAAOA;IACX;AACJ;AAEO,MAAMM,QAAKC,qBAAqB;IACnC,aAAaC;IACb,gBAAgB5B;IAChB,cAAc;QACV;YAAC6B;YAAc;gBAAE,UAAU;YAAK;SAAE;QAClC;YAACC;YAAqB;gBAAE,UAAU;YAAK;SAAE;KAC5C;AACL"}
1
+ {"version":3,"file":"features/ai/Ai.js","sources":["../../../src/features/ai/Ai.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { generateText } from \"ai\";\nimport { streamText } from \"ai\";\nimport { Ai as AiAbstraction } from \"./abstractions.js\";\nimport { AiSdkFactory } from \"./abstractions.js\";\nimport { AiConnectionFactory } from \"./abstractions.js\";\nimport type { AiGenerateTextParams, AiModel, IAiSdkFactory } from \"./abstractions.js\";\nimport type { AiStreamTextParams } from \"./abstractions.js\";\nimport type { IAiSdk } from \"./abstractions.js\";\nimport type { IAiConnection } from \"./abstractions.js\";\nimport type { IAiConnectionInline } from \"./abstractions.js\";\nimport type { LanguageModel } from \"ai\";\nimport { mdbid } from \"@webiny/utils/mdbid.js\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport {\n AiBeforeGenerateTextEvent,\n AiAfterGenerateTextEvent,\n AiGenerateTextErrorEvent,\n AiBeforeStreamTextEvent\n} from \"./events.js\";\n\nfunction toAiModel(factory: IAiSdkFactory, modelId: string, modelName: string): AiModel {\n return {\n providerId: factory.id,\n providerName: factory.name,\n modelId,\n modelName\n };\n}\n\nclass AiImpl implements AiAbstraction.Interface {\n private sdkCache = new Map<string, IAiSdk>();\n private resolvedConnections: IAiConnection[] | null = null;\n\n constructor(\n private readonly sdkFactories: AiSdkFactory.Interface[],\n private readonly connectionFactories: AiConnectionFactory.Interface[],\n private readonly eventPublisher: EventPublisher.Interface\n ) {}\n\n async generateText(params: AiGenerateTextParams): ReturnType<typeof generateText> {\n const { model, connection, ...rest } = params;\n const resolvedModel = await this.resolveLanguageModel(model, connection);\n const requestId = mdbid();\n\n await this.eventPublisher.publish(new AiBeforeGenerateTextEvent({ requestId, params }));\n\n const start = performance.now();\n\n try {\n const result = await generateText({ model: resolvedModel, ...rest } as Parameters<\n typeof generateText\n >[0]);\n\n const duration = performance.now() - start;\n\n await this.eventPublisher.publish(\n new AiAfterGenerateTextEvent({ requestId, params, result, duration })\n );\n\n return result;\n } catch (err) {\n const duration = performance.now() - start;\n const error = err instanceof Error ? err : new Error(String(err));\n\n await this.eventPublisher.publish(\n new AiGenerateTextErrorEvent({ requestId, params, error, duration })\n );\n\n throw err;\n }\n }\n\n async streamText(params: AiStreamTextParams): Promise<ReturnType<typeof streamText>> {\n const { model, connection, ...rest } = params;\n const resolvedModel = await this.resolveLanguageModel(model, connection);\n\n await this.eventPublisher.publish(new AiBeforeStreamTextEvent({ params }));\n\n // Cast required: spreading the discriminated Prompt union loses its narrowing.\n return streamText({ model: resolvedModel, ...rest } as Parameters<typeof streamText>[0]);\n }\n\n listModels(): Promise<AiModel[]> {\n return Promise.resolve(\n this.sdkFactories.flatMap(factory =>\n factory.models.map(m => toAiModel(factory, m.id, m.name))\n )\n );\n }\n\n async listModelsByConnections(): Promise<AiModel[]> {\n const connections = await this.getConnections();\n return connections.flatMap(conn => {\n const factory = this.sdkFactories.find(f => f.id === conn.sdkName);\n if (!factory) {\n return [];\n }\n return factory.models.map(m => toAiModel(factory, m.id, m.name));\n });\n }\n\n async listModelsByConnection(connection: string | IAiConnectionInline): Promise<AiModel[]> {\n const conn = await this.resolveConnection(undefined, connection);\n const factory = this.sdkFactories.find(f => f.id === conn.sdkName);\n if (!factory) {\n return [];\n }\n return factory.models.map(m => toAiModel(factory, m.id, m.name));\n }\n\n private async resolveLanguageModel(\n modelId: string,\n connection?: string | IAiConnectionInline\n ): Promise<LanguageModel> {\n const slashIndex = modelId.indexOf(\"/\");\n if (slashIndex === -1) {\n throw new Error(\n `Invalid model ID \"${modelId}\". Expected format: \"<providerId>/<modelId>\" (e.g. \"openai/gpt-4o\").`\n );\n }\n\n const providerId = modelId.slice(0, slashIndex);\n const modelName = modelId.slice(slashIndex + 1);\n\n const conn = await this.resolveConnection(providerId, connection);\n const sdk = await this.getSdk(conn);\n return sdk.languageModel(modelName);\n }\n\n private async getConnections(): Promise<IAiConnection[]> {\n if (!this.resolvedConnections) {\n this.resolvedConnections = await Promise.all(\n this.connectionFactories.map(f => f.execute())\n );\n }\n return this.resolvedConnections;\n }\n\n private async resolveConnection(\n providerId: string | undefined,\n connection?: string | IAiConnectionInline\n ): Promise<IAiConnectionInline> {\n if (typeof connection === \"object\") {\n return connection;\n }\n\n const connections = await this.getConnections();\n\n if (typeof connection === \"string\") {\n const found = connections.find(c => c.id === connection);\n if (!found) {\n const known = connections.map(c => `\"${c.id}\"`).join(\", \");\n throw new Error(\n `Unknown AI connection \"${connection}\". Registered connections: ${known}.`\n );\n }\n return found;\n }\n\n const found = connections.find(c => c.sdkName === providerId);\n if (!found) {\n const known = connections.map(c => `\"${c.id}\" (${c.sdkName})`).join(\", \");\n throw new Error(\n `No AI connection found for provider \"${providerId}\". Registered connections: ${known}.`\n );\n }\n return found;\n }\n\n private async getSdk(connection: IAiConnectionInline): Promise<IAiSdk> {\n const cacheKey =\n \"id\" in connection\n ? (connection as IAiConnection).id\n : `${connection.sdkName}:${connection.apiKey ?? \"__env__\"}`;\n\n const cached = this.sdkCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const factory = this.sdkFactories.find(f => f.id === connection.sdkName);\n if (!factory) {\n const known = this.sdkFactories.map(f => `\"${f.id}\"`).join(\", \");\n throw new Error(\n `No AI SDK factory found for \"${connection.sdkName}\". Registered factories: ${known}.`\n );\n }\n\n const sdk = await factory.execute(connection.apiKey);\n this.sdkCache.set(cacheKey, sdk);\n return sdk;\n }\n}\n\nexport const Ai = createImplementation({\n abstraction: AiAbstraction,\n implementation: AiImpl,\n dependencies: [\n [AiSdkFactory, { multiple: true }],\n [AiConnectionFactory, { multiple: true }],\n EventPublisher\n ]\n});\n"],"names":["toAiModel","factory","modelId","modelName","AiImpl","sdkFactories","connectionFactories","eventPublisher","Map","params","model","connection","rest","resolvedModel","requestId","mdbid","AiBeforeGenerateTextEvent","start","performance","result","generateText","duration","AiAfterGenerateTextEvent","err","error","Error","String","AiGenerateTextErrorEvent","AiBeforeStreamTextEvent","streamText","Promise","m","connections","conn","f","undefined","slashIndex","providerId","sdk","found","c","known","cacheKey","cached","Ai","createImplementation","AiAbstraction","AiSdkFactory","AiConnectionFactory","EventPublisher"],"mappings":";;;;;;AAqBA,SAASA,UAAUC,OAAsB,EAAEC,OAAe,EAAEC,SAAiB;IACzE,OAAO;QACH,YAAYF,QAAQ,EAAE;QACtB,cAAcA,QAAQ,IAAI;QAC1BC;QACAC;IACJ;AACJ;AAEA,MAAMC;IAIF,YACqBC,YAAsC,EACtCC,mBAAoD,EACpDC,cAAwC,CAC3D;aAHmBF,YAAY,GAAZA;aACAC,mBAAmB,GAAnBA;aACAC,cAAc,GAAdA;aANb,QAAQ,GAAG,IAAIC;aACf,mBAAmB,GAA2B;IAMnD;IAEH,MAAM,aAAaC,MAA4B,EAAmC;QAC9E,MAAM,EAAEC,KAAK,EAAEC,UAAU,EAAE,GAAGC,MAAM,GAAGH;QACvC,MAAMI,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAACH,OAAOC;QAC7D,MAAMG,YAAYC;QAElB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIC,0BAA0B;YAAEF;YAAWL;QAAO;QAEpF,MAAMQ,QAAQC,YAAY,GAAG;QAE7B,IAAI;YACA,MAAMC,SAAS,MAAMC,aAAa;gBAAE,OAAOP;gBAAe,GAAGD,IAAI;YAAC;YAIlE,MAAMS,WAAWH,YAAY,GAAG,KAAKD;YAErC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIK,yBAAyB;gBAAER;gBAAWL;gBAAQU;gBAAQE;YAAS;YAGvE,OAAOF;QACX,EAAE,OAAOI,KAAK;YACV,MAAMF,WAAWH,YAAY,GAAG,KAAKD;YACrC,MAAMO,QAAQD,eAAeE,QAAQF,MAAM,IAAIE,MAAMC,OAAOH;YAE5D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAII,yBAAyB;gBAAEb;gBAAWL;gBAAQe;gBAAOH;YAAS;YAGtE,MAAME;QACV;IACJ;IAEA,MAAM,WAAWd,MAA0B,EAA0C;QACjF,MAAM,EAAEC,KAAK,EAAEC,UAAU,EAAE,GAAGC,MAAM,GAAGH;QACvC,MAAMI,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAACH,OAAOC;QAE7D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIiB,wBAAwB;YAAEnB;QAAO;QAGvE,OAAOoB,WAAW;YAAE,OAAOhB;YAAe,GAAGD,IAAI;QAAC;IACtD;IAEA,aAAiC;QAC7B,OAAOkB,QAAQ,OAAO,CAClB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC7B,CAAAA,UACtBA,QAAQ,MAAM,CAAC,GAAG,CAAC8B,CAAAA,IAAK/B,UAAUC,SAAS8B,EAAE,EAAE,EAAEA,EAAE,IAAI;IAGnE;IAEA,MAAM,0BAA8C;QAChD,MAAMC,cAAc,MAAM,IAAI,CAAC,cAAc;QAC7C,OAAOA,YAAY,OAAO,CAACC,CAAAA;YACvB,MAAMhC,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAACiC,CAAAA,IAAKA,EAAE,EAAE,KAAKD,KAAK,OAAO;YACjE,IAAI,CAAChC,SACD,OAAO,EAAE;YAEb,OAAOA,QAAQ,MAAM,CAAC,GAAG,CAAC8B,CAAAA,IAAK/B,UAAUC,SAAS8B,EAAE,EAAE,EAAEA,EAAE,IAAI;QAClE;IACJ;IAEA,MAAM,uBAAuBpB,UAAwC,EAAsB;QACvF,MAAMsB,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAACE,QAAWxB;QACrD,MAAMV,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAACiC,CAAAA,IAAKA,EAAE,EAAE,KAAKD,KAAK,OAAO;QACjE,IAAI,CAAChC,SACD,OAAO,EAAE;QAEb,OAAOA,QAAQ,MAAM,CAAC,GAAG,CAAC8B,CAAAA,IAAK/B,UAAUC,SAAS8B,EAAE,EAAE,EAAEA,EAAE,IAAI;IAClE;IAEA,MAAc,qBACV7B,OAAe,EACfS,UAAyC,EACnB;QACtB,MAAMyB,aAAalC,QAAQ,OAAO,CAAC;QACnC,IAAIkC,AAAe,OAAfA,YACA,MAAM,IAAIX,MACN,CAAC,kBAAkB,EAAEvB,QAAQ,oEAAoE,CAAC;QAI1G,MAAMmC,aAAanC,QAAQ,KAAK,CAAC,GAAGkC;QACpC,MAAMjC,YAAYD,QAAQ,KAAK,CAACkC,aAAa;QAE7C,MAAMH,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAACI,YAAY1B;QACtD,MAAM2B,MAAM,MAAM,IAAI,CAAC,MAAM,CAACL;QAC9B,OAAOK,IAAI,aAAa,CAACnC;IAC7B;IAEA,MAAc,iBAA2C;QACrD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EACzB,IAAI,CAAC,mBAAmB,GAAG,MAAM2B,QAAQ,GAAG,CACxC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAACI,CAAAA,IAAKA,EAAE,OAAO;QAGnD,OAAO,IAAI,CAAC,mBAAmB;IACnC;IAEA,MAAc,kBACVG,UAA8B,EAC9B1B,UAAyC,EACb;QAC5B,IAAI,AAAsB,YAAtB,OAAOA,YACP,OAAOA;QAGX,MAAMqB,cAAc,MAAM,IAAI,CAAC,cAAc;QAE7C,IAAI,AAAsB,YAAtB,OAAOrB,YAAyB;YAChC,MAAM4B,QAAQP,YAAY,IAAI,CAACQ,CAAAA,IAAKA,EAAE,EAAE,KAAK7B;YAC7C,IAAI,CAAC4B,OAAO;gBACR,MAAME,QAAQT,YAAY,GAAG,CAACQ,CAAAA,IAAK,CAAC,CAAC,EAAEA,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;gBACrD,MAAM,IAAIf,MACN,CAAC,uBAAuB,EAAEd,WAAW,2BAA2B,EAAE8B,MAAM,CAAC,CAAC;YAElF;YACA,OAAOF;QACX;QAEA,MAAMA,QAAQP,YAAY,IAAI,CAACQ,CAAAA,IAAKA,EAAE,OAAO,KAAKH;QAClD,IAAI,CAACE,OAAO;YACR,MAAME,QAAQT,YAAY,GAAG,CAACQ,CAAAA,IAAK,CAAC,CAAC,EAAEA,EAAE,EAAE,CAAC,GAAG,EAAEA,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YACpE,MAAM,IAAIf,MACN,CAAC,qCAAqC,EAAEY,WAAW,2BAA2B,EAAEI,MAAM,CAAC,CAAC;QAEhG;QACA,OAAOF;IACX;IAEA,MAAc,OAAO5B,UAA+B,EAAmB;QACnE,MAAM+B,WACF,QAAQ/B,aACDA,WAA6B,EAAE,GAChC,GAAGA,WAAW,OAAO,CAAC,CAAC,EAAEA,WAAW,MAAM,IAAI,WAAW;QAEnE,MAAMgC,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACD;QACjC,IAAIC,QACA,OAAOA;QAGX,MAAM1C,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAACiC,CAAAA,IAAKA,EAAE,EAAE,KAAKvB,WAAW,OAAO;QACvE,IAAI,CAACV,SAAS;YACV,MAAMwC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAACP,CAAAA,IAAK,CAAC,CAAC,EAAEA,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAC3D,MAAM,IAAIT,MACN,CAAC,6BAA6B,EAAEd,WAAW,OAAO,CAAC,yBAAyB,EAAE8B,MAAM,CAAC,CAAC;QAE9F;QAEA,MAAMH,MAAM,MAAMrC,QAAQ,OAAO,CAACU,WAAW,MAAM;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC+B,UAAUJ;QAC5B,OAAOA;IACX;AACJ;AAEO,MAAMM,QAAKC,qBAAqB;IACnC,aAAaC;IACb,gBAAgB1C;IAChB,cAAc;QACV;YAAC2C;YAAc;gBAAE,UAAU;YAAK;SAAE;QAClC;YAACC;YAAqB;gBAAE,UAAU;YAAK;SAAE;QACzCC;KACH;AACL"}
@@ -2,64 +2,28 @@ import { createImplementation } from "@webiny/feature/api";
2
2
  import { AiSdkFactory } from "./abstractions.js";
3
3
  const ANTHROPIC_MODELS = [
4
4
  {
5
- id: "claude-3-haiku-20240307",
6
- name: "Claude 3 Haiku"
5
+ id: "claude-opus-4-7",
6
+ name: "Claude Opus 4.7"
7
7
  },
8
8
  {
9
- id: "claude-haiku-4-5-20251001",
10
- name: "Claude Haiku 4.5"
11
- },
12
- {
13
- id: "claude-haiku-4-5",
14
- name: "Claude Haiku 4.5"
15
- },
16
- {
17
- id: "claude-opus-4-0",
18
- name: "Claude Opus 4"
19
- },
20
- {
21
- id: "claude-opus-4-20250514",
22
- name: "Claude Opus 4"
23
- },
24
- {
25
- id: "claude-opus-4-1-20250805",
26
- name: "Claude Opus 4.1"
27
- },
28
- {
29
- id: "claude-opus-4-1",
30
- name: "Claude Opus 4.1"
9
+ id: "claude-opus-4-6",
10
+ name: "Claude Opus 4.6"
31
11
  },
32
12
  {
33
13
  id: "claude-opus-4-5",
34
14
  name: "Claude Opus 4.5"
35
15
  },
36
16
  {
37
- id: "claude-opus-4-5-20251101",
38
- name: "Claude Opus 4.5"
39
- },
40
- {
41
- id: "claude-sonnet-4-0",
42
- name: "Claude Sonnet 4"
43
- },
44
- {
45
- id: "claude-sonnet-4-20250514",
46
- name: "Claude Sonnet 4"
47
- },
48
- {
49
- id: "claude-sonnet-4-5-20250929",
50
- name: "Claude Sonnet 4.5"
17
+ id: "claude-sonnet-4-6",
18
+ name: "Claude Sonnet 4.6"
51
19
  },
52
20
  {
53
21
  id: "claude-sonnet-4-5",
54
22
  name: "Claude Sonnet 4.5"
55
23
  },
56
24
  {
57
- id: "claude-sonnet-4-6",
58
- name: "Claude Sonnet 4.6"
59
- },
60
- {
61
- id: "claude-opus-4-6",
62
- name: "Claude Opus 4.6"
25
+ id: "claude-haiku-4-5",
26
+ name: "Claude Haiku 4.5"
63
27
  }
64
28
  ];
65
29
  class AnthropicSdkFactoryImpl {
@@ -1 +1 @@
1
- {"version":3,"file":"features/ai/AnthropicSdkFactory.js","sources":["../../../src/features/ai/AnthropicSdkFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AiSdkFactory as AiSdkFactoryAbstraction } from \"./abstractions.js\";\nimport type { IAiSdk, IAiSdkModel } from \"./abstractions.js\";\n\nconst ANTHROPIC_MODELS: IAiSdkModel[] = [\n { id: \"claude-3-haiku-20240307\", name: \"Claude 3 Haiku\" },\n { id: \"claude-haiku-4-5-20251001\", name: \"Claude Haiku 4.5\" },\n { id: \"claude-haiku-4-5\", name: \"Claude Haiku 4.5\" },\n { id: \"claude-opus-4-0\", name: \"Claude Opus 4\" },\n { id: \"claude-opus-4-20250514\", name: \"Claude Opus 4\" },\n { id: \"claude-opus-4-1-20250805\", name: \"Claude Opus 4.1\" },\n { id: \"claude-opus-4-1\", name: \"Claude Opus 4.1\" },\n { id: \"claude-opus-4-5\", name: \"Claude Opus 4.5\" },\n { id: \"claude-opus-4-5-20251101\", name: \"Claude Opus 4.5\" },\n { id: \"claude-sonnet-4-0\", name: \"Claude Sonnet 4\" },\n { id: \"claude-sonnet-4-20250514\", name: \"Claude Sonnet 4\" },\n { id: \"claude-sonnet-4-5-20250929\", name: \"Claude Sonnet 4.5\" },\n { id: \"claude-sonnet-4-5\", name: \"Claude Sonnet 4.5\" },\n { id: \"claude-sonnet-4-6\", name: \"Claude Sonnet 4.6\" },\n { id: \"claude-opus-4-6\", name: \"Claude Opus 4.6\" }\n];\n\nclass AnthropicSdkFactoryImpl implements AiSdkFactoryAbstraction.Interface {\n readonly id = \"anthropic\";\n readonly name = \"Anthropic\";\n readonly models = ANTHROPIC_MODELS;\n\n async execute(apiKey?: string): Promise<IAiSdk> {\n const { createAnthropic } = await import(\"@ai-sdk/anthropic\");\n const provider = createAnthropic({\n apiKey: apiKey ?? process.env.WEBINY_API_ANTHROPIC_API_KEY\n });\n return {\n languageModel: modelId => provider.chat(modelId)\n };\n }\n}\n\nexport const AnthropicSdkFactory = createImplementation({\n abstraction: AiSdkFactoryAbstraction,\n implementation: AnthropicSdkFactoryImpl,\n dependencies: []\n});\n"],"names":["ANTHROPIC_MODELS","AnthropicSdkFactoryImpl","apiKey","createAnthropic","provider","process","modelId","AnthropicSdkFactory","createImplementation","AiSdkFactoryAbstraction"],"mappings":";;AAIA,MAAMA,mBAAkC;IACpC;QAAE,IAAI;QAA2B,MAAM;IAAiB;IACxD;QAAE,IAAI;QAA6B,MAAM;IAAmB;IAC5D;QAAE,IAAI;QAAoB,MAAM;IAAmB;IACnD;QAAE,IAAI;QAAmB,MAAM;IAAgB;IAC/C;QAAE,IAAI;QAA0B,MAAM;IAAgB;IACtD;QAAE,IAAI;QAA4B,MAAM;IAAkB;IAC1D;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAA4B,MAAM;IAAkB;IAC1D;QAAE,IAAI;QAAqB,MAAM;IAAkB;IACnD;QAAE,IAAI;QAA4B,MAAM;IAAkB;IAC1D;QAAE,IAAI;QAA8B,MAAM;IAAoB;IAC9D;QAAE,IAAI;QAAqB,MAAM;IAAoB;IACrD;QAAE,IAAI;QAAqB,MAAM;IAAoB;IACrD;QAAE,IAAI;QAAmB,MAAM;IAAkB;CACpD;AAED,MAAMC;IAKF,MAAM,QAAQC,MAAe,EAAmB;QAC5C,MAAM,EAAEC,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC;QACzC,MAAMC,WAAWD,gBAAgB;YAC7B,QAAQD,UAAUG,QAAQ,GAAG,CAAC,4BAA4B;QAC9D;QACA,OAAO;YACH,eAAeC,CAAAA,UAAWF,SAAS,IAAI,CAACE;QAC5C;IACJ;;aAZS,EAAE,GAAG;aACL,IAAI,GAAG;aACP,MAAM,GAAGN;;AAWtB;AAEO,MAAMO,sBAAsBC,qBAAqB;IACpD,aAAaC;IACb,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/ai/AnthropicSdkFactory.js","sources":["../../../src/features/ai/AnthropicSdkFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AiSdkFactory as AiSdkFactoryAbstraction } from \"./abstractions.js\";\nimport type { IAiSdk, IAiSdkModel } from \"./abstractions.js\";\n\nconst ANTHROPIC_MODELS: IAiSdkModel[] = [\n { id: \"claude-opus-4-7\", name: \"Claude Opus 4.7\" },\n { id: \"claude-opus-4-6\", name: \"Claude Opus 4.6\" },\n { id: \"claude-opus-4-5\", name: \"Claude Opus 4.5\" },\n { id: \"claude-sonnet-4-6\", name: \"Claude Sonnet 4.6\" },\n { id: \"claude-sonnet-4-5\", name: \"Claude Sonnet 4.5\" },\n { id: \"claude-haiku-4-5\", name: \"Claude Haiku 4.5\" }\n];\n\nclass AnthropicSdkFactoryImpl implements AiSdkFactoryAbstraction.Interface {\n readonly id = \"anthropic\";\n readonly name = \"Anthropic\";\n readonly models = ANTHROPIC_MODELS;\n\n async execute(apiKey?: string): Promise<IAiSdk> {\n const { createAnthropic } = await import(\"@ai-sdk/anthropic\");\n const provider = createAnthropic({\n apiKey: apiKey ?? process.env.WEBINY_API_ANTHROPIC_API_KEY\n });\n return {\n languageModel: modelId => provider.chat(modelId)\n };\n }\n}\n\nexport const AnthropicSdkFactory = createImplementation({\n abstraction: AiSdkFactoryAbstraction,\n implementation: AnthropicSdkFactoryImpl,\n dependencies: []\n});\n"],"names":["ANTHROPIC_MODELS","AnthropicSdkFactoryImpl","apiKey","createAnthropic","provider","process","modelId","AnthropicSdkFactory","createImplementation","AiSdkFactoryAbstraction"],"mappings":";;AAIA,MAAMA,mBAAkC;IACpC;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAAmB,MAAM;IAAkB;IACjD;QAAE,IAAI;QAAqB,MAAM;IAAoB;IACrD;QAAE,IAAI;QAAqB,MAAM;IAAoB;IACrD;QAAE,IAAI;QAAoB,MAAM;IAAmB;CACtD;AAED,MAAMC;IAKF,MAAM,QAAQC,MAAe,EAAmB;QAC5C,MAAM,EAAEC,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC;QACzC,MAAMC,WAAWD,gBAAgB;YAC7B,QAAQD,UAAUG,QAAQ,GAAG,CAAC,4BAA4B;QAC9D;QACA,OAAO;YACH,eAAeC,CAAAA,UAAWF,SAAS,IAAI,CAACE;QAC5C;IACJ;;aAZS,EAAE,GAAG;aACL,IAAI,GAAG;aACP,MAAM,GAAGN;;AAWtB;AAEO,MAAMO,sBAAsBC,qBAAqB;IACpD,aAAaC;IACb,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
@@ -1,217 +1,53 @@
1
1
  import { createImplementation } from "@webiny/feature/api";
2
2
  import { AiSdkFactory } from "./abstractions.js";
3
3
  const OPENAI_MODELS = [
4
- {
5
- id: "gpt-5",
6
- name: "GPT-5"
7
- },
8
- {
9
- id: "gpt-5-2025-08-07",
10
- name: "GPT-5"
11
- },
12
- {
13
- id: "gpt-5-chat-latest",
14
- name: "GPT-5"
15
- },
16
- {
17
- id: "gpt-5-mini",
18
- name: "GPT-5 Mini"
19
- },
20
- {
21
- id: "gpt-5-mini-2025-08-07",
22
- name: "GPT-5 Mini"
23
- },
24
- {
25
- id: "gpt-5-nano",
26
- name: "GPT-5 Nano"
27
- },
28
- {
29
- id: "gpt-5-nano-2025-08-07",
30
- name: "GPT-5 Nano"
31
- },
32
- {
33
- id: "gpt-5.1",
34
- name: "GPT-5.1"
35
- },
36
- {
37
- id: "gpt-5.1-2025-11-13",
38
- name: "GPT-5.1"
39
- },
40
- {
41
- id: "gpt-5.1-chat-latest",
42
- name: "GPT-5.1"
43
- },
44
- {
45
- id: "gpt-5.2",
46
- name: "GPT-5.2"
47
- },
48
- {
49
- id: "gpt-5.2-2025-12-11",
50
- name: "GPT-5.2"
51
- },
52
- {
53
- id: "gpt-5.2-chat-latest",
54
- name: "GPT-5.2"
55
- },
56
- {
57
- id: "gpt-5.2-pro",
58
- name: "GPT-5.2 Pro"
59
- },
60
- {
61
- id: "gpt-5.2-pro-2025-12-11",
62
- name: "GPT-5.2 Pro"
63
- },
64
- {
65
- id: "gpt-5.3-chat-latest",
66
- name: "GPT-5.3"
67
- },
68
4
  {
69
5
  id: "gpt-5.4",
70
6
  name: "GPT-5.4"
71
7
  },
72
- {
73
- id: "gpt-5.4-2026-03-05",
74
- name: "GPT-5.4"
75
- },
76
8
  {
77
9
  id: "gpt-5.4-mini",
78
10
  name: "GPT-5.4 Mini"
79
11
  },
80
- {
81
- id: "gpt-5.4-mini-2026-03-17",
82
- name: "GPT-5.4 Mini"
83
- },
84
12
  {
85
13
  id: "gpt-5.4-nano",
86
14
  name: "GPT-5.4 Nano"
87
15
  },
88
- {
89
- id: "gpt-5.4-nano-2026-03-17",
90
- name: "GPT-5.4 Nano"
91
- },
92
16
  {
93
17
  id: "gpt-5.4-pro",
94
18
  name: "GPT-5.4 Pro"
95
19
  },
96
20
  {
97
- id: "gpt-5.4-pro-2026-03-05",
98
- name: "GPT-5.4 Pro"
21
+ id: "gpt-5.3-chat-latest",
22
+ name: "GPT-5.3 Chat"
99
23
  },
100
24
  {
101
25
  id: "gpt-4.1",
102
26
  name: "GPT-4.1"
103
27
  },
104
- {
105
- id: "gpt-4.1-2025-04-14",
106
- name: "GPT-4.1"
107
- },
108
28
  {
109
29
  id: "gpt-4.1-mini",
110
30
  name: "GPT-4.1 Mini"
111
31
  },
112
- {
113
- id: "gpt-4.1-mini-2025-04-14",
114
- name: "GPT-4.1 Mini"
115
- },
116
32
  {
117
33
  id: "gpt-4.1-nano",
118
34
  name: "GPT-4.1 Nano"
119
35
  },
120
- {
121
- id: "gpt-4.1-nano-2025-04-14",
122
- name: "GPT-4.1 Nano"
123
- },
124
36
  {
125
37
  id: "gpt-4o",
126
38
  name: "GPT-4o"
127
39
  },
128
- {
129
- id: "gpt-4o-2024-05-13",
130
- name: "GPT-4o"
131
- },
132
- {
133
- id: "gpt-4o-2024-08-06",
134
- name: "GPT-4o"
135
- },
136
- {
137
- id: "gpt-4o-2024-11-20",
138
- name: "GPT-4o"
139
- },
140
- {
141
- id: "gpt-4o-audio-preview",
142
- name: "GPT-4o Audio Preview"
143
- },
144
- {
145
- id: "gpt-4o-audio-preview-2024-12-17",
146
- name: "GPT-4o Audio Preview"
147
- },
148
- {
149
- id: "gpt-4o-search-preview",
150
- name: "GPT-4o Search Preview"
151
- },
152
- {
153
- id: "gpt-4o-search-preview-2025-03-11",
154
- name: "GPT-4o Search Preview"
155
- },
156
- {
157
- id: "gpt-4o-mini-search-preview",
158
- name: "GPT-4o Mini Search Preview"
159
- },
160
- {
161
- id: "gpt-4o-mini-search-preview-2025-03-11",
162
- name: "GPT-4o Mini Search Preview"
163
- },
164
40
  {
165
41
  id: "gpt-4o-mini",
166
42
  name: "GPT-4o Mini"
167
43
  },
168
- {
169
- id: "gpt-4o-mini-2024-07-18",
170
- name: "GPT-4o Mini"
171
- },
172
- {
173
- id: "gpt-3.5-turbo-0125",
174
- name: "GPT-3.5 Turbo"
175
- },
176
- {
177
- id: "gpt-3.5-turbo",
178
- name: "GPT-3.5 Turbo"
179
- },
180
- {
181
- id: "gpt-3.5-turbo-1106",
182
- name: "GPT-3.5 Turbo"
183
- },
184
- {
185
- id: "o1",
186
- name: "o1"
187
- },
188
- {
189
- id: "o1-2024-12-17",
190
- name: "o1"
191
- },
192
- {
193
- id: "o3",
194
- name: "o3"
195
- },
196
- {
197
- id: "o3-2025-04-16",
198
- name: "o3"
199
- },
200
- {
201
- id: "o3-mini",
202
- name: "o3 Mini"
203
- },
204
- {
205
- id: "o3-mini-2025-01-31",
206
- name: "o3 Mini"
207
- },
208
44
  {
209
45
  id: "o4-mini",
210
46
  name: "o4 Mini"
211
47
  },
212
48
  {
213
- id: "o4-mini-2025-04-16",
214
- name: "o4 Mini"
49
+ id: "o3",
50
+ name: "o3"
215
51
  }
216
52
  ];
217
53
  class OpenAiSdkFactoryImpl {
@@ -1 +1 @@
1
- {"version":3,"file":"features/ai/OpenAiSdkFactory.js","sources":["../../../src/features/ai/OpenAiSdkFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AiSdkFactory as AiSdkFactoryAbstraction } from \"./abstractions.js\";\nimport type { IAiSdk, IAiSdkModel } from \"./abstractions.js\";\n\n// 'gpt-5' | 'gpt-5-2025-08-07' | 'gpt-5-mini' | 'gpt-5-mini-2025-08-07' | 'gpt-5-nano' | 'gpt-5-nano-2025-08-07' | 'gpt-5-chat-latest' | 'gpt-5.1' | 'gpt-5.1-2025-11-13' | 'gpt-5.1-chat-latest' | 'gpt-5.2' | 'gpt-5.2-2025-12-11' | 'gpt-5.2-chat-latest' | 'gpt-5.2-pro' | 'gpt-5.2-pro-2025-12-11' | 'gpt-5.3-chat-latest' | 'gpt-5.4' | 'gpt-5.4-2026-03-05' | 'gpt-5.4-mini' | 'gpt-5.4-mini-2026-03-17' | 'gpt-5.4-nano' | 'gpt-5.4-nano-2026-03-17' | 'gpt-5.4-pro' | 'gpt-5.4-pro-2026-03-05'\n\nconst OPENAI_MODELS: IAiSdkModel[] = [\n { id: \"gpt-5\", name: \"GPT-5\" },\n { id: \"gpt-5-2025-08-07\", name: \"GPT-5\" },\n { id: \"gpt-5-chat-latest\", name: \"GPT-5\" },\n { id: \"gpt-5-mini\", name: \"GPT-5 Mini\" },\n { id: \"gpt-5-mini-2025-08-07\", name: \"GPT-5 Mini\" },\n { id: \"gpt-5-nano\", name: \"GPT-5 Nano\" },\n { id: \"gpt-5-nano-2025-08-07\", name: \"GPT-5 Nano\" },\n { id: \"gpt-5.1\", name: \"GPT-5.1\" },\n { id: \"gpt-5.1-2025-11-13\", name: \"GPT-5.1\" },\n { id: \"gpt-5.1-chat-latest\", name: \"GPT-5.1\" },\n { id: \"gpt-5.2\", name: \"GPT-5.2\" },\n { id: \"gpt-5.2-2025-12-11\", name: \"GPT-5.2\" },\n { id: \"gpt-5.2-chat-latest\", name: \"GPT-5.2\" },\n { id: \"gpt-5.2-pro\", name: \"GPT-5.2 Pro\" },\n { id: \"gpt-5.2-pro-2025-12-11\", name: \"GPT-5.2 Pro\" },\n { id: \"gpt-5.3-chat-latest\", name: \"GPT-5.3\" },\n { id: \"gpt-5.4\", name: \"GPT-5.4\" },\n { id: \"gpt-5.4-2026-03-05\", name: \"GPT-5.4\" },\n { id: \"gpt-5.4-mini\", name: \"GPT-5.4 Mini\" },\n { id: \"gpt-5.4-mini-2026-03-17\", name: \"GPT-5.4 Mini\" },\n { id: \"gpt-5.4-nano\", name: \"GPT-5.4 Nano\" },\n { id: \"gpt-5.4-nano-2026-03-17\", name: \"GPT-5.4 Nano\" },\n { id: \"gpt-5.4-pro\", name: \"GPT-5.4 Pro\" },\n { id: \"gpt-5.4-pro-2026-03-05\", name: \"GPT-5.4 Pro\" },\n { id: \"gpt-4.1\", name: \"GPT-4.1\" },\n { id: \"gpt-4.1-2025-04-14\", name: \"GPT-4.1\" },\n { id: \"gpt-4.1-mini\", name: \"GPT-4.1 Mini\" },\n { id: \"gpt-4.1-mini-2025-04-14\", name: \"GPT-4.1 Mini\" },\n { id: \"gpt-4.1-nano\", name: \"GPT-4.1 Nano\" },\n { id: \"gpt-4.1-nano-2025-04-14\", name: \"GPT-4.1 Nano\" },\n { id: \"gpt-4o\", name: \"GPT-4o\" },\n { id: \"gpt-4o-2024-05-13\", name: \"GPT-4o\" },\n { id: \"gpt-4o-2024-08-06\", name: \"GPT-4o\" },\n { id: \"gpt-4o-2024-11-20\", name: \"GPT-4o\" },\n { id: \"gpt-4o-audio-preview\", name: \"GPT-4o Audio Preview\" },\n { id: \"gpt-4o-audio-preview-2024-12-17\", name: \"GPT-4o Audio Preview\" },\n { id: \"gpt-4o-search-preview\", name: \"GPT-4o Search Preview\" },\n { id: \"gpt-4o-search-preview-2025-03-11\", name: \"GPT-4o Search Preview\" },\n { id: \"gpt-4o-mini-search-preview\", name: \"GPT-4o Mini Search Preview\" },\n { id: \"gpt-4o-mini-search-preview-2025-03-11\", name: \"GPT-4o Mini Search Preview\" },\n { id: \"gpt-4o-mini\", name: \"GPT-4o Mini\" },\n { id: \"gpt-4o-mini-2024-07-18\", name: \"GPT-4o Mini\" },\n { id: \"gpt-3.5-turbo-0125\", name: \"GPT-3.5 Turbo\" },\n { id: \"gpt-3.5-turbo\", name: \"GPT-3.5 Turbo\" },\n { id: \"gpt-3.5-turbo-1106\", name: \"GPT-3.5 Turbo\" },\n { id: \"o1\", name: \"o1\" },\n { id: \"o1-2024-12-17\", name: \"o1\" },\n { id: \"o3\", name: \"o3\" },\n { id: \"o3-2025-04-16\", name: \"o3\" },\n { id: \"o3-mini\", name: \"o3 Mini\" },\n { id: \"o3-mini-2025-01-31\", name: \"o3 Mini\" },\n { id: \"o4-mini\", name: \"o4 Mini\" },\n { id: \"o4-mini-2025-04-16\", name: \"o4 Mini\" }\n];\n\nclass OpenAiSdkFactoryImpl implements AiSdkFactoryAbstraction.Interface {\n readonly id = \"openai\";\n readonly name = \"OpenAI\";\n readonly models = OPENAI_MODELS;\n\n async execute(apiKey?: string): Promise<IAiSdk> {\n const { createOpenAI } = await import(\"@ai-sdk/openai\");\n const provider = createOpenAI({\n apiKey: apiKey ?? process.env.WEBINY_API_OPENAI_API_KEY\n });\n return {\n languageModel: modelId => provider.chat(modelId)\n };\n }\n}\n\nexport const OpenAiSdkFactory = createImplementation({\n abstraction: AiSdkFactoryAbstraction,\n implementation: OpenAiSdkFactoryImpl,\n dependencies: []\n});\n"],"names":["OPENAI_MODELS","OpenAiSdkFactoryImpl","apiKey","createOpenAI","provider","process","modelId","OpenAiSdkFactory","createImplementation","AiSdkFactoryAbstraction"],"mappings":"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"}
1
+ {"version":3,"file":"features/ai/OpenAiSdkFactory.js","sources":["../../../src/features/ai/OpenAiSdkFactory.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AiSdkFactory as AiSdkFactoryAbstraction } from \"./abstractions.js\";\nimport type { IAiSdk, IAiSdkModel } from \"./abstractions.js\";\n\nconst OPENAI_MODELS: IAiSdkModel[] = [\n { id: \"gpt-5.4\", name: \"GPT-5.4\" },\n { id: \"gpt-5.4-mini\", name: \"GPT-5.4 Mini\" },\n { id: \"gpt-5.4-nano\", name: \"GPT-5.4 Nano\" },\n { id: \"gpt-5.4-pro\", name: \"GPT-5.4 Pro\" },\n { id: \"gpt-5.3-chat-latest\", name: \"GPT-5.3 Chat\" },\n { id: \"gpt-4.1\", name: \"GPT-4.1\" },\n { id: \"gpt-4.1-mini\", name: \"GPT-4.1 Mini\" },\n { id: \"gpt-4.1-nano\", name: \"GPT-4.1 Nano\" },\n { id: \"gpt-4o\", name: \"GPT-4o\" },\n { id: \"gpt-4o-mini\", name: \"GPT-4o Mini\" },\n { id: \"o4-mini\", name: \"o4 Mini\" },\n { id: \"o3\", name: \"o3\" }\n];\n\nclass OpenAiSdkFactoryImpl implements AiSdkFactoryAbstraction.Interface {\n readonly id = \"openai\";\n readonly name = \"OpenAI\";\n readonly models = OPENAI_MODELS;\n\n async execute(apiKey?: string): Promise<IAiSdk> {\n const { createOpenAI } = await import(\"@ai-sdk/openai\");\n const provider = createOpenAI({\n apiKey: apiKey ?? process.env.WEBINY_API_OPENAI_API_KEY\n });\n return {\n languageModel: modelId => provider.chat(modelId)\n };\n }\n}\n\nexport const OpenAiSdkFactory = createImplementation({\n abstraction: AiSdkFactoryAbstraction,\n implementation: OpenAiSdkFactoryImpl,\n dependencies: []\n});\n"],"names":["OPENAI_MODELS","OpenAiSdkFactoryImpl","apiKey","createOpenAI","provider","process","modelId","OpenAiSdkFactory","createImplementation","AiSdkFactoryAbstraction"],"mappings":";;AAIA,MAAMA,gBAA+B;IACjC;QAAE,IAAI;QAAW,MAAM;IAAU;IACjC;QAAE,IAAI;QAAgB,MAAM;IAAe;IAC3C;QAAE,IAAI;QAAgB,MAAM;IAAe;IAC3C;QAAE,IAAI;QAAe,MAAM;IAAc;IACzC;QAAE,IAAI;QAAuB,MAAM;IAAe;IAClD;QAAE,IAAI;QAAW,MAAM;IAAU;IACjC;QAAE,IAAI;QAAgB,MAAM;IAAe;IAC3C;QAAE,IAAI;QAAgB,MAAM;IAAe;IAC3C;QAAE,IAAI;QAAU,MAAM;IAAS;IAC/B;QAAE,IAAI;QAAe,MAAM;IAAc;IACzC;QAAE,IAAI;QAAW,MAAM;IAAU;IACjC;QAAE,IAAI;QAAM,MAAM;IAAK;CAC1B;AAED,MAAMC;IAKF,MAAM,QAAQC,MAAe,EAAmB;QAC5C,MAAM,EAAEC,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC;QACtC,MAAMC,WAAWD,aAAa;YAC1B,QAAQD,UAAUG,QAAQ,GAAG,CAAC,yBAAyB;QAC3D;QACA,OAAO;YACH,eAAeC,CAAAA,UAAWF,SAAS,IAAI,CAACE;QAC5C;IACJ;;aAZS,EAAE,GAAG;aACL,IAAI,GAAG;aACP,MAAM,GAAGN;;AAWtB;AAEO,MAAMO,mBAAmBC,qBAAqB;IACjD,aAAaC;IACb,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,9 @@
1
+ import { TextExtractor, type TextExtractorResult } from "./abstractions.js";
2
+ declare class TextExtractorImpl implements TextExtractor.Interface {
3
+ canExtract(mimeType: string): boolean;
4
+ extract(buffer: Buffer, mimeType: string): Promise<TextExtractorResult>;
5
+ }
6
+ export declare const DefaultTextExtractor: typeof TextExtractorImpl & {
7
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ITextExtractor>;
8
+ };
9
+ export {};
@@ -0,0 +1,28 @@
1
+ import { TextExtractor } from "./abstractions.js";
2
+ import { extractDocxText } from "./parsers/docxParser.js";
3
+ const TEXT_MIME_PREFIX = "text/";
4
+ const SUPPORTED_MIME_TYPES = new Set([
5
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
6
+ "application/json"
7
+ ]);
8
+ class TextExtractorImpl {
9
+ canExtract(mimeType) {
10
+ return mimeType.startsWith(TEXT_MIME_PREFIX) || SUPPORTED_MIME_TYPES.has(mimeType);
11
+ }
12
+ async extract(buffer, mimeType) {
13
+ if (mimeType.startsWith(TEXT_MIME_PREFIX) || "application/json" === mimeType) return {
14
+ text: buffer.toString("utf-8")
15
+ };
16
+ if ("application/vnd.openxmlformats-officedocument.wordprocessingml.document" === mimeType) return {
17
+ text: await extractDocxText(buffer)
18
+ };
19
+ throw new Error(`Unsupported MIME type: ${mimeType}`);
20
+ }
21
+ }
22
+ const DefaultTextExtractor = TextExtractor.createImplementation({
23
+ implementation: TextExtractorImpl,
24
+ dependencies: []
25
+ });
26
+ export { DefaultTextExtractor };
27
+
28
+ //# sourceMappingURL=DefaultTextExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/ai/TextExtractor/DefaultTextExtractor.js","sources":["../../../../src/features/ai/TextExtractor/DefaultTextExtractor.ts"],"sourcesContent":["import { TextExtractor, type TextExtractorResult } from \"./abstractions.js\";\nimport { extractDocxText } from \"./parsers/docxParser.js\";\n\nconst TEXT_MIME_PREFIX = \"text/\";\n\nconst SUPPORTED_MIME_TYPES = new Set([\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/json\"\n]);\n\nclass TextExtractorImpl implements TextExtractor.Interface {\n canExtract(mimeType: string): boolean {\n return mimeType.startsWith(TEXT_MIME_PREFIX) || SUPPORTED_MIME_TYPES.has(mimeType);\n }\n\n async extract(buffer: Buffer, mimeType: string): Promise<TextExtractorResult> {\n if (mimeType.startsWith(TEXT_MIME_PREFIX) || mimeType === \"application/json\") {\n return { text: buffer.toString(\"utf-8\") };\n }\n\n if (\n mimeType === \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ) {\n return { text: await extractDocxText(buffer) };\n }\n\n throw new Error(`Unsupported MIME type: ${mimeType}`);\n }\n}\n\nexport const DefaultTextExtractor = TextExtractor.createImplementation({\n implementation: TextExtractorImpl,\n dependencies: []\n});\n"],"names":["TEXT_MIME_PREFIX","SUPPORTED_MIME_TYPES","Set","TextExtractorImpl","mimeType","buffer","extractDocxText","Error","DefaultTextExtractor","TextExtractor"],"mappings":";;AAGA,MAAMA,mBAAmB;AAEzB,MAAMC,uBAAuB,IAAIC,IAAI;IACjC;IACA;CACH;AAED,MAAMC;IACF,WAAWC,QAAgB,EAAW;QAClC,OAAOA,SAAS,UAAU,CAACJ,qBAAqBC,qBAAqB,GAAG,CAACG;IAC7E;IAEA,MAAM,QAAQC,MAAc,EAAED,QAAgB,EAAgC;QAC1E,IAAIA,SAAS,UAAU,CAACJ,qBAAqBI,AAAa,uBAAbA,UACzC,OAAO;YAAE,MAAMC,OAAO,QAAQ,CAAC;QAAS;QAG5C,IACID,AAAa,8EAAbA,UAEA,OAAO;YAAE,MAAM,MAAME,gBAAgBD;QAAQ;QAGjD,MAAM,IAAIE,MAAM,CAAC,uBAAuB,EAAEH,UAAU;IACxD;AACJ;AAEO,MAAMI,uBAAuBC,cAAc,oBAAoB,CAAC;IACnE,gBAAgBN;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,12 @@
1
+ export interface TextExtractorResult {
2
+ text: string;
3
+ }
4
+ export interface ITextExtractor {
5
+ canExtract(mimeType: string): boolean;
6
+ extract(buffer: Buffer, mimeType: string): Promise<TextExtractorResult>;
7
+ }
8
+ export declare const TextExtractor: import("@webiny/di").Abstraction<ITextExtractor>;
9
+ export declare namespace TextExtractor {
10
+ type Interface = ITextExtractor;
11
+ type Result = TextExtractorResult;
12
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const TextExtractor = createAbstraction("TextExtractor");
3
+ export { TextExtractor };
4
+
5
+ //# sourceMappingURL=abstractions.js.map