@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.
- package/createApiCore.d.ts +1 -1
- package/createApiCore.js +8 -4
- package/createApiCore.js.map +1 -1
- package/exports/api/security/api-key.d.ts +1 -0
- package/exports/api/security/api-key.js +1 -0
- package/exports/api.d.ts +1 -1
- package/exports/api.js +1 -1
- package/features/ai/Ai.d.ts +3 -1
- package/features/ai/Ai.js +39 -4
- package/features/ai/Ai.js.map +1 -1
- package/features/ai/AnthropicSdkFactory.js +8 -44
- package/features/ai/AnthropicSdkFactory.js.map +1 -1
- package/features/ai/OpenAiSdkFactory.js +4 -168
- package/features/ai/OpenAiSdkFactory.js.map +1 -1
- package/features/ai/TextExtractor/DefaultTextExtractor.d.ts +9 -0
- package/features/ai/TextExtractor/DefaultTextExtractor.js +28 -0
- package/features/ai/TextExtractor/DefaultTextExtractor.js.map +1 -0
- package/features/ai/TextExtractor/abstractions.d.ts +12 -0
- package/features/ai/TextExtractor/abstractions.js +5 -0
- package/features/ai/TextExtractor/abstractions.js.map +1 -0
- package/features/ai/TextExtractor/index.d.ts +3 -0
- package/features/ai/TextExtractor/index.js +2 -0
- package/features/ai/TextExtractor/parsers/docxParser.d.ts +1 -0
- package/features/ai/TextExtractor/parsers/docxParser.js +111 -0
- package/features/ai/TextExtractor/parsers/docxParser.js.map +1 -0
- package/features/ai/events.d.ts +59 -0
- package/features/ai/events.js +41 -0
- package/features/ai/events.js.map +1 -0
- package/features/ai/feature.js +6 -0
- package/features/ai/feature.js.map +1 -1
- package/features/ai/index.d.ts +6 -0
- package/features/ai/index.js +3 -0
- package/features/ai/toolPipeline/AiOutputToolRegistry.d.ts +11 -0
- package/features/ai/toolPipeline/AiOutputToolRegistry.js +31 -0
- package/features/ai/toolPipeline/AiOutputToolRegistry.js.map +1 -0
- package/features/ai/toolPipeline/AiToolPipelineRunner.d.ts +10 -0
- package/features/ai/toolPipeline/AiToolPipelineRunner.js +36 -0
- package/features/ai/toolPipeline/AiToolPipelineRunner.js.map +1 -0
- package/features/ai/toolPipeline/abstractions.d.ts +23 -0
- package/features/ai/toolPipeline/abstractions.js +7 -0
- package/features/ai/toolPipeline/abstractions.js.map +1 -0
- package/features/ai/toolPipeline/index.d.ts +2 -0
- package/features/ai/toolPipeline/index.js +1 -0
- package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.d.ts +1 -1
- package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.d.ts +1 -3
- package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyBySlug/abstractions.d.ts +1 -1
- package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.d.ts +1 -3
- package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyByToken/abstractions.d.ts +1 -1
- package/features/security/apiKeys/GetApiKeyByToken/abstractions.js.map +1 -1
- package/features/security/apiKeys/feature.js +7 -2
- package/features/security/apiKeys/feature.js.map +1 -1
- package/features/security/apiKeys/shared/ApiKeyProvider.d.ts +3 -5
- package/features/security/apiKeys/shared/ApiKeyProvider.js +6 -21
- package/features/security/apiKeys/shared/ApiKeyProvider.js.map +1 -1
- package/features/security/apiKeys/shared/ApiKeysRepository.d.ts +1 -0
- package/features/security/apiKeys/shared/ApiKeysRepository.js +19 -4
- package/features/security/apiKeys/shared/ApiKeysRepository.js.map +1 -1
- package/features/security/apiKeys/shared/generateToken.d.ts +1 -1
- package/features/security/apiKeys/shared/generateToken.js.map +1 -1
- package/features/security/apiKeys/shared/types.d.ts +1 -1
- package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.d.ts +1 -1
- package/features/security/utils/getPermissionsFromRoles.d.ts +1 -1
- package/features/serviceDiscovery/ServiceDiscovery.d.ts +17 -0
- package/features/serviceDiscovery/ServiceDiscovery.js +22 -0
- package/features/serviceDiscovery/ServiceDiscovery.js.map +1 -0
- package/features/serviceDiscovery/__tests__/ServiceDiscovery.test.d.ts +1 -0
- package/features/serviceDiscovery/__tests__/ServiceDiscovery.test.js +111 -0
- package/features/serviceDiscovery/__tests__/ServiceDiscovery.test.js.map +1 -0
- package/features/serviceDiscovery/index.d.ts +3 -0
- package/features/serviceDiscovery/index.js +1 -0
- package/features/tenancy/CreateTenant/CreateTenantUseCase.d.ts +1 -1
- package/features/tenancy/InstallTenant/InstallTenantUseCase.d.ts +1 -1
- package/features/tenancy/TenantContext/TenantContext.js.map +1 -1
- package/features/tenancy/UpdateTenant/UpdateTenantUseCase.d.ts +2 -2
- package/features/users/CreateUser/decorators/CreateUserWithWcpIncrement.d.ts +1 -1
- package/features/wcp/WcpContext/WcpContext.d.ts +5 -0
- package/features/wcp/WcpContext/WcpContext.js +15 -0
- package/features/wcp/WcpContext/WcpContext.js.map +1 -1
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.d.ts +21 -7
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +27 -2
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
- package/graphql/wcp/graphql.js +1 -0
- package/graphql/wcp/graphql.js.map +1 -1
- package/legacy/security/plugins/apiKeyAuthentication.d.ts +1 -1
- package/legacy/security/plugins/apiKeyAuthorization.d.ts +1 -1
- package/legacy/security/plugins/authenticateUsingCookie.d.ts +1 -1
- package/legacy/security/plugins/authenticateUsingHttpHeader.d.ts +1 -1
- package/legacy/wcp/LegacyWcpContext.d.ts +5 -0
- package/legacy/wcp/LegacyWcpContext.js +15 -0
- package/legacy/wcp/LegacyWcpContext.js.map +1 -1
- package/package.json +20 -22
- package/types/security.d.ts +1 -1
package/createApiCore.d.ts
CHANGED
|
@@ -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/
|
|
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
|
-
|
|
10
|
-
|
|
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
|
package/createApiCore.js.map
CHANGED
|
@@ -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
|
|
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";
|
package/features/ai/Ai.d.ts
CHANGED
|
@@ -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
|
-
|
|
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 };
|
package/features/ai/Ai.js.map
CHANGED
|
@@ -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":"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"}
|
|
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":"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"}
|
|
@@ -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-
|
|
6
|
-
name: "Claude
|
|
5
|
+
id: "claude-opus-4-7",
|
|
6
|
+
name: "Claude Opus 4.7"
|
|
7
7
|
},
|
|
8
8
|
{
|
|
9
|
-
id: "claude-
|
|
10
|
-
name: "Claude
|
|
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-
|
|
38
|
-
name: "Claude
|
|
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-
|
|
58
|
-
name: "Claude
|
|
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-
|
|
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.
|
|
98
|
-
name: "GPT-5.
|
|
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: "
|
|
214
|
-
name: "
|
|
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\
|
|
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
|
+
}
|