@webiny/ai-powerups 6.4.8-beta.0 → 6.4.9-beta.0

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.
@@ -1,11 +1,13 @@
1
1
  import { z } from "zod";
2
2
  import { Encryption } from "@webiny/api-core/features/encryption/index.js";
3
3
  import { Masker } from "@webiny/api-core/features/masker/index.js";
4
+ import { AiModelRegistry } from "@webiny/api-core/features/ai/index.js";
4
5
  import { AiPowerUpsSettingsGroupHandler } from "../../../api/features/shared/index.js";
5
6
  import type { PersistedProviders, ProvidersSettings } from "./types.js";
6
7
  declare class ProvidersHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {
7
8
  private encryption;
8
9
  private masker;
10
+ private modelRegistry;
9
11
  readonly name = "providers";
10
12
  readonly inputSchema: z.ZodObject<{
11
13
  presets: z.ZodArray<z.ZodObject<{
@@ -16,7 +18,7 @@ declare class ProvidersHandlerImpl implements AiPowerUpsSettingsGroupHandler.Int
16
18
  apiKey: z.ZodOptional<z.ZodString>;
17
19
  }, z.core.$strip>>;
18
20
  }, z.core.$strip>;
19
- constructor(encryption: Encryption.Interface, masker: Masker.Interface);
21
+ constructor(encryption: Encryption.Interface, masker: Masker.Interface, modelRegistry: AiModelRegistry.Interface);
20
22
  mapFromStorage(persisted: unknown): ProvidersSettings;
21
23
  mapToStorage(internal: unknown, existing: unknown | null): Promise<PersistedProviders>;
22
24
  }
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { Encryption } from "@webiny/api-core/features/encryption/index.js";
3
3
  import { Masker } from "@webiny/api-core/features/masker/index.js";
4
+ import { AiModelRegistry } from "@webiny/api-core/features/ai/index.js";
4
5
  import { AiPowerUpsSettingsGroupHandler } from "../shared/index.js";
5
6
  const inputSchema = z.object({
6
7
  presets: z.array(z.object({
@@ -12,9 +13,10 @@ const inputSchema = z.object({
12
13
  }))
13
14
  });
14
15
  class ProvidersHandlerImpl {
15
- constructor(encryption, masker){
16
+ constructor(encryption, masker, modelRegistry){
16
17
  this.encryption = encryption;
17
18
  this.masker = masker;
19
+ this.modelRegistry = modelRegistry;
18
20
  this.name = "providers";
19
21
  this.inputSchema = inputSchema;
20
22
  }
@@ -39,6 +41,16 @@ class ProvidersHandlerImpl {
39
41
  const input = internal;
40
42
  const existingData = existing;
41
43
  const existingPresets = existingData?.presets ?? [];
44
+ const availableModels = await this.modelRegistry.listModels();
45
+ for (const preset of input.presets){
46
+ if (!preset.model) continue;
47
+ const slashIndex = preset.model.indexOf("/");
48
+ if (-1 === slashIndex) throw new Error(`Invalid model ID "${preset.model}" in preset "${preset.name}". Expected format: "<providerId>/<modelId>".`);
49
+ const providerId = preset.model.slice(0, slashIndex);
50
+ const modelId = preset.model.slice(slashIndex + 1);
51
+ const found = availableModels.some((m)=>m.providerId === providerId && m.modelId === modelId);
52
+ if (!found) throw new Error(`Model "${preset.model}" in preset "${preset.name}" is not available. Use listModels() to see available models.`);
53
+ }
42
54
  const presets = await Promise.all(input.presets.map(async (preset)=>{
43
55
  const existingMatch = existingPresets.find((ep)=>ep.id === preset.id);
44
56
  let apiKeyEncrypted;
@@ -71,7 +83,8 @@ const ProvidersHandler = AiPowerUpsSettingsGroupHandler.createImplementation({
71
83
  implementation: ProvidersHandlerImpl,
72
84
  dependencies: [
73
85
  Encryption,
74
- Masker
86
+ Masker,
87
+ AiModelRegistry
75
88
  ]
76
89
  });
77
90
  export default ProvidersHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/Providers/ProvidersHandler.js","sources":["../../../../src/api/features/Providers/ProvidersHandler.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { Masker } from \"@webiny/api-core/features/masker/index.js\";\nimport { AiPowerUpsSettingsGroupHandler } from \"~/api/features/shared/index.js\";\nimport type { PersistedProviderPreset, PersistedProviders, ProvidersSettings } from \"./types.js\";\n\nconst inputSchema = z.object({\n presets: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n model: z.string().min(1),\n apiKey: z.string().optional()\n })\n )\n});\n\nclass ProvidersHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {\n readonly name = \"providers\";\n readonly inputSchema = inputSchema;\n\n constructor(\n private encryption: Encryption.Interface,\n private masker: Masker.Interface\n ) {}\n\n mapFromStorage(persisted: unknown): ProvidersSettings {\n if (!persisted || typeof persisted !== \"object\") {\n return { presets: [] };\n }\n\n const data = persisted as PersistedProviders;\n const presets = (data.presets ?? []).map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n model: p.model,\n apiKeyMasked: p.apiKeyMasked ?? \"\",\n apiKeyEncrypted: p.apiKeyEncrypted ?? \"\"\n }));\n\n return { presets };\n }\n\n async mapToStorage(internal: unknown, existing: unknown | null): Promise<PersistedProviders> {\n const input = internal as ProvidersSettings;\n const existingData = existing as ProvidersSettings | null;\n const existingPresets = existingData?.presets ?? [];\n\n const presets: PersistedProviderPreset[] = await Promise.all(\n input.presets.map(async preset => {\n const existingMatch = existingPresets.find(ep => ep.id === preset.id);\n\n let apiKeyEncrypted: string;\n let apiKeyMasked: string;\n\n if (!preset.apiKey || preset.apiKey === existingMatch?.apiKeyMasked) {\n // Carry forward existing encrypted key\n apiKeyEncrypted = existingMatch?.apiKeyEncrypted ?? \"\";\n apiKeyMasked = existingMatch?.apiKeyMasked ?? \"\";\n } else {\n // New plaintext key — encrypt and mask\n apiKeyEncrypted = await this.encryption.encrypt(preset.apiKey);\n apiKeyMasked = this.masker.mask(preset.apiKey, [8, 4]);\n }\n\n return {\n id: preset.id,\n name: preset.name,\n description: preset.description,\n model: preset.model,\n apiKeyEncrypted,\n apiKeyMasked\n };\n })\n );\n\n return { presets };\n }\n}\n\nexport default AiPowerUpsSettingsGroupHandler.createImplementation({\n implementation: ProvidersHandlerImpl,\n dependencies: [Encryption, Masker]\n});\n"],"names":["inputSchema","z","ProvidersHandlerImpl","encryption","masker","persisted","data","presets","p","internal","existing","input","existingData","existingPresets","Promise","preset","existingMatch","ep","apiKeyEncrypted","apiKeyMasked","AiPowerUpsSettingsGroupHandler","Encryption","Masker"],"mappings":";;;;AAMA,MAAMA,cAAcC,EAAE,MAAM,CAAC;IACzB,SAASA,EAAE,KAAK,CACZA,EAAE,MAAM,CAAC;QACL,IAAIA,EAAE,MAAM,GAAG,GAAG,CAAC;QACnB,MAAMA,EAAE,MAAM,GAAG,GAAG,CAAC;QACrB,aAAaA,EAAE,MAAM,GAAG,QAAQ;QAChC,OAAOA,EAAE,MAAM,GAAG,GAAG,CAAC;QACtB,QAAQA,EAAE,MAAM,GAAG,QAAQ;IAC/B;AAER;AAEA,MAAMC;IAIF,YACYC,UAAgC,EAChCC,MAAwB,CAClC;aAFUD,UAAU,GAAVA;aACAC,MAAM,GAANA;aALH,IAAI,GAAG;aACP,WAAW,GAAGJ;IAKpB;IAEH,eAAeK,SAAkB,EAAqB;QAClD,IAAI,CAACA,aAAa,AAAqB,YAArB,OAAOA,WACrB,OAAO;YAAE,SAAS,EAAE;QAAC;QAGzB,MAAMC,OAAOD;QACb,MAAME,UAAWD,AAAAA,CAAAA,KAAK,OAAO,IAAI,EAAC,EAAG,GAAG,CAACE,CAAAA,IAAM;gBAC3C,IAAIA,EAAE,EAAE;gBACR,MAAMA,EAAE,IAAI;gBACZ,aAAaA,EAAE,WAAW;gBAC1B,OAAOA,EAAE,KAAK;gBACd,cAAcA,EAAE,YAAY,IAAI;gBAChC,iBAAiBA,EAAE,eAAe,IAAI;YAC1C;QAEA,OAAO;YAAED;QAAQ;IACrB;IAEA,MAAM,aAAaE,QAAiB,EAAEC,QAAwB,EAA+B;QACzF,MAAMC,QAAQF;QACd,MAAMG,eAAeF;QACrB,MAAMG,kBAAkBD,cAAc,WAAW,EAAE;QAEnD,MAAML,UAAqC,MAAMO,QAAQ,GAAG,CACxDH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAMI;YACpB,MAAMC,gBAAgBH,gBAAgB,IAAI,CAACI,CAAAA,KAAMA,GAAG,EAAE,KAAKF,OAAO,EAAE;YAEpE,IAAIG;YACJ,IAAIC;YAEJ,IAAI,AAACJ,OAAO,MAAM,IAAIA,OAAO,MAAM,KAAKC,eAAe,cAIhD;gBAEHE,kBAAkB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACH,OAAO,MAAM;gBAC7DI,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI,CAACJ,OAAO,MAAM,EAAE;oBAAC;oBAAG;iBAAE;YACzD,OARqE;gBAEjEG,kBAAkBF,eAAe,mBAAmB;gBACpDG,eAAeH,eAAe,gBAAgB;YAClD;YAMA,OAAO;gBACH,IAAID,OAAO,EAAE;gBACb,MAAMA,OAAO,IAAI;gBACjB,aAAaA,OAAO,WAAW;gBAC/B,OAAOA,OAAO,KAAK;gBACnBG;gBACAC;YACJ;QACJ;QAGJ,OAAO;YAAEZ;QAAQ;IACrB;AACJ;AAEA,yBAAea,+BAA+B,oBAAoB,CAAC;IAC/D,gBAAgBlB;IAChB,cAAc;QAACmB;QAAYC;KAAO;AACtC"}
1
+ {"version":3,"file":"api/features/Providers/ProvidersHandler.js","sources":["../../../../src/api/features/Providers/ProvidersHandler.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { Masker } from \"@webiny/api-core/features/masker/index.js\";\nimport { AiModelRegistry } from \"@webiny/api-core/features/ai/index.js\";\nimport { AiPowerUpsSettingsGroupHandler } from \"~/api/features/shared/index.js\";\nimport type { PersistedProviderPreset, PersistedProviders, ProvidersSettings } from \"./types.js\";\n\nconst inputSchema = z.object({\n presets: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n model: z.string().min(1),\n apiKey: z.string().optional()\n })\n )\n});\n\nclass ProvidersHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {\n readonly name = \"providers\";\n readonly inputSchema = inputSchema;\n\n constructor(\n private encryption: Encryption.Interface,\n private masker: Masker.Interface,\n private modelRegistry: AiModelRegistry.Interface\n ) {}\n\n mapFromStorage(persisted: unknown): ProvidersSettings {\n if (!persisted || typeof persisted !== \"object\") {\n return { presets: [] };\n }\n\n const data = persisted as PersistedProviders;\n const presets = (data.presets ?? []).map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n model: p.model,\n apiKeyMasked: p.apiKeyMasked ?? \"\",\n apiKeyEncrypted: p.apiKeyEncrypted ?? \"\"\n }));\n\n return { presets };\n }\n\n async mapToStorage(internal: unknown, existing: unknown | null): Promise<PersistedProviders> {\n const input = internal as ProvidersSettings;\n const existingData = existing as ProvidersSettings | null;\n const existingPresets = existingData?.presets ?? [];\n\n // Validate that all preset models are in the registry.\n const availableModels = await this.modelRegistry.listModels();\n for (const preset of input.presets) {\n if (!preset.model) {\n continue;\n }\n const slashIndex = preset.model.indexOf(\"/\");\n if (slashIndex === -1) {\n throw new Error(\n `Invalid model ID \"${preset.model}\" in preset \"${preset.name}\". Expected format: \"<providerId>/<modelId>\".`\n );\n }\n const providerId = preset.model.slice(0, slashIndex);\n const modelId = preset.model.slice(slashIndex + 1);\n const found = availableModels.some(\n m => m.providerId === providerId && m.modelId === modelId\n );\n if (!found) {\n throw new Error(\n `Model \"${preset.model}\" in preset \"${preset.name}\" is not available. Use listModels() to see available models.`\n );\n }\n }\n\n const presets: PersistedProviderPreset[] = await Promise.all(\n input.presets.map(async preset => {\n const existingMatch = existingPresets.find(ep => ep.id === preset.id);\n\n let apiKeyEncrypted: string;\n let apiKeyMasked: string;\n\n if (!preset.apiKey || preset.apiKey === existingMatch?.apiKeyMasked) {\n // Carry forward existing encrypted key\n apiKeyEncrypted = existingMatch?.apiKeyEncrypted ?? \"\";\n apiKeyMasked = existingMatch?.apiKeyMasked ?? \"\";\n } else {\n // New plaintext key — encrypt and mask\n apiKeyEncrypted = await this.encryption.encrypt(preset.apiKey);\n apiKeyMasked = this.masker.mask(preset.apiKey, [8, 4]);\n }\n\n return {\n id: preset.id,\n name: preset.name,\n description: preset.description,\n model: preset.model,\n apiKeyEncrypted,\n apiKeyMasked\n };\n })\n );\n\n return { presets };\n }\n}\n\nexport default AiPowerUpsSettingsGroupHandler.createImplementation({\n implementation: ProvidersHandlerImpl,\n dependencies: [Encryption, Masker, AiModelRegistry]\n});\n"],"names":["inputSchema","z","ProvidersHandlerImpl","encryption","masker","modelRegistry","persisted","data","presets","p","internal","existing","input","existingData","existingPresets","availableModels","preset","slashIndex","Error","providerId","modelId","found","m","Promise","existingMatch","ep","apiKeyEncrypted","apiKeyMasked","AiPowerUpsSettingsGroupHandler","Encryption","Masker","AiModelRegistry"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { CoreGraphQLSchemaFactory } from "@webiny/handler-graphql/graphql/abstractions.core.js";
2
2
  import { ErrorResponse, Response } from "@webiny/handler-graphql/responses.js";
3
- import { Ai } from "@webiny/api-core/features/ai/index.js";
3
+ import { AiModelRegistry } from "@webiny/api-core/features/ai/index.js";
4
4
  import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
5
5
  import { GetSettingsUseCase } from "../features/GetSettings/index.js";
6
6
  import { UpdateSettingsUseCase } from "../features/UpdateSettings/index.js";
@@ -65,9 +65,9 @@ class BaseGraphQLSchemaImpl {
65
65
  builder.addResolver({
66
66
  path: "AiPowerUpsQuery.listModels",
67
67
  dependencies: [
68
- Ai
68
+ AiModelRegistry
69
69
  ],
70
- resolver: (ai)=>async ()=>ai.listModels()
70
+ resolver: (registry)=>async ()=>registry.listModels()
71
71
  });
72
72
  builder.addResolver({
73
73
  path: "AiPowerUpsQuery.getSettings",
@@ -1 +1 @@
1
- {"version":3,"file":"api/graphql/BaseGraphQLSchema.js","sources":["../../../src/api/graphql/BaseGraphQLSchema.ts"],"sourcesContent":["import { CoreGraphQLSchemaFactory } from \"@webiny/handler-graphql/graphql/abstractions.core.js\";\nimport { Response, ErrorResponse } from \"@webiny/handler-graphql/responses.js\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { GetSettingsUseCase } from \"~/api/features/GetSettings/index.js\";\nimport { UpdateSettingsUseCase } from \"~/api/features/UpdateSettings/index.js\";\nimport { AiPowerUpsSettingsGraphQLMapper } from \"./abstractions.js\";\nimport {\n WB_GENERATE_PAGE_CONTENT_TASK_ID,\n type IWbGeneratePageContentTaskInput\n} from \"~/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js\";\n\nclass BaseGraphQLSchemaImpl implements CoreGraphQLSchemaFactory.Interface {\n async execute(\n builder: CoreGraphQLSchemaFactory.SchemaBuilder\n ): Promise<CoreGraphQLSchemaFactory.SchemaBuilder> {\n builder.addTypeDefs(/* GraphQL */ `\n type AiModel {\n providerId: String!\n providerName: String!\n modelId: String!\n modelName: String!\n }\n\n type AiPowerUpsQuery {\n listModels: [AiModel!]!\n getSettings: JSON\n }\n\n type AiPowerUpsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type AiPowerUpsSettingsResponse {\n data: JSON\n error: AiPowerUpsError\n }\n\n type AiPowerUpsMutation {\n updateSettings(input: JSON!): AiPowerUpsSettingsResponse!\n generatePageContent(\n prompt: String!\n components: JSON!\n tools: JSON!\n projectId: String\n excludedFileIds: [String!]\n readerPersonaId: String\n writerPersonaId: String\n ): JSON!\n }\n\n extend type Query {\n aiPowerUps: AiPowerUpsQuery\n }\n\n extend type Mutation {\n aiPowerUps: AiPowerUpsMutation\n }\n `);\n\n builder.addResolver({\n path: \"Query.aiPowerUps\",\n resolver: () => () => ({})\n });\n\n builder.addResolver({\n path: \"Mutation.aiPowerUps\",\n resolver: () => () => ({})\n });\n\n builder.addResolver({\n path: \"AiPowerUpsQuery.listModels\",\n dependencies: [Ai],\n resolver: (ai: Ai.Interface) => {\n return async () => ai.listModels();\n }\n });\n\n builder.addResolver({\n path: \"AiPowerUpsQuery.getSettings\",\n dependencies: [GetSettingsUseCase, AiPowerUpsSettingsGraphQLMapper],\n resolver: (\n useCase: GetSettingsUseCase.Interface,\n mapper: AiPowerUpsSettingsGraphQLMapper.Interface\n ) => {\n return async () => {\n const result = await useCase.execute();\n if (result.isFail()) {\n throw result.error;\n }\n\n return mapper.toApi(result.value);\n };\n }\n });\n\n builder.addResolver<IWbGeneratePageContentTaskInput>({\n path: \"AiPowerUpsMutation.generatePageContent\",\n dependencies: [TaskService],\n resolver: (taskService: TaskService.Interface) => {\n return async ({ args }) => {\n const result = await taskService.trigger<IWbGeneratePageContentTaskInput>({\n definition: WB_GENERATE_PAGE_CONTENT_TASK_ID,\n input: {\n prompt: args.prompt,\n components: args.components,\n tools: args.tools,\n projectId: args.projectId ?? null,\n excludedFileIds: args.excludedFileIds ?? null,\n readerPersonaId: args.readerPersonaId ?? null,\n writerPersonaId: args.writerPersonaId ?? null\n }\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return { id: result.value.id };\n };\n }\n });\n\n builder.addResolver<{ input: Record<string, unknown> }>({\n path: \"AiPowerUpsMutation.updateSettings\",\n dependencies: [\n GetSettingsUseCase,\n UpdateSettingsUseCase,\n AiPowerUpsSettingsGraphQLMapper\n ],\n resolver: (\n getSettings: GetSettingsUseCase.Interface,\n updateSettings: UpdateSettingsUseCase.Interface,\n mapper: AiPowerUpsSettingsGraphQLMapper.Interface\n ) => {\n return async ({ args }) => {\n const currentResult = await getSettings.execute();\n if (currentResult.isFail()) {\n return new ErrorResponse(currentResult.error);\n }\n\n const assembled = await mapper.fromApi(args.input, currentResult.value);\n const result = await updateSettings.execute(assembled);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(await mapper.toApi(result.value));\n };\n }\n });\n\n return builder;\n }\n}\n\nexport const BaseGraphQLSchema = CoreGraphQLSchemaFactory.createImplementation({\n implementation: BaseGraphQLSchemaImpl,\n dependencies: []\n});\n"],"names":["BaseGraphQLSchemaImpl","builder","Ai","ai","GetSettingsUseCase","AiPowerUpsSettingsGraphQLMapper","useCase","mapper","result","TaskService","taskService","args","WB_GENERATE_PAGE_CONTENT_TASK_ID","UpdateSettingsUseCase","getSettings","updateSettings","currentResult","ErrorResponse","assembled","Response","BaseGraphQLSchema","CoreGraphQLSchemaFactory"],"mappings":";;;;;;;;AAYA,MAAMA;IACF,MAAM,QACFC,OAA+C,EACA;QAC/CA,QAAQ,WAAW,CAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6CnC,CAAC;QAEDA,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,UAAU,IAAM,IAAO,EAAC;QAC5B;QAEAA,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,UAAU,IAAM,IAAO,EAAC;QAC5B;QAEAA,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,cAAc;gBAACC;aAAG;YAClB,UAAU,CAACC,KACA,UAAYA,GAAG,UAAU;QAExC;QAEAF,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,cAAc;gBAACG;gBAAoBC;aAAgC;YACnE,UAAU,CACNC,SACAC,SAEO;oBACH,MAAMC,SAAS,MAAMF,QAAQ,OAAO;oBACpC,IAAIE,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;oBAGtB,OAAOD,OAAO,KAAK,CAACC,OAAO,KAAK;gBACpC;QAER;QAEAP,QAAQ,WAAW,CAAkC;YACjD,MAAM;YACN,cAAc;gBAACQ;aAAY;YAC3B,UAAU,CAACC,cACA,OAAO,EAAEC,IAAI,EAAE;oBAClB,MAAMH,SAAS,MAAME,YAAY,OAAO,CAAkC;wBACtE,YAAYE;wBACZ,OAAO;4BACH,QAAQD,KAAK,MAAM;4BACnB,YAAYA,KAAK,UAAU;4BAC3B,OAAOA,KAAK,KAAK;4BACjB,WAAWA,KAAK,SAAS,IAAI;4BAC7B,iBAAiBA,KAAK,eAAe,IAAI;4BACzC,iBAAiBA,KAAK,eAAe,IAAI;4BACzC,iBAAiBA,KAAK,eAAe,IAAI;wBAC7C;oBACJ;oBAEA,IAAIH,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;oBAGtB,OAAO;wBAAE,IAAIA,OAAO,KAAK,CAAC,EAAE;oBAAC;gBACjC;QAER;QAEAP,QAAQ,WAAW,CAAqC;YACpD,MAAM;YACN,cAAc;gBACVG;gBACAS;gBACAR;aACH;YACD,UAAU,CACNS,aACAC,gBACAR,SAEO,OAAO,EAAEI,IAAI,EAAE;oBAClB,MAAMK,gBAAgB,MAAMF,YAAY,OAAO;oBAC/C,IAAIE,cAAc,MAAM,IACpB,OAAO,IAAIC,cAAcD,cAAc,KAAK;oBAGhD,MAAME,YAAY,MAAMX,OAAO,OAAO,CAACI,KAAK,KAAK,EAAEK,cAAc,KAAK;oBACtE,MAAMR,SAAS,MAAMO,eAAe,OAAO,CAACG;oBAE5C,IAAIV,OAAO,MAAM,IACb,OAAO,IAAIS,cAAcT,OAAO,KAAK;oBAGzC,OAAO,IAAIW,SAAS,MAAMZ,OAAO,KAAK,CAACC,OAAO,KAAK;gBACvD;QAER;QAEA,OAAOP;IACX;AACJ;AAEO,MAAMmB,oBAAoBC,yBAAyB,oBAAoB,CAAC;IAC3E,gBAAgBrB;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"api/graphql/BaseGraphQLSchema.js","sources":["../../../src/api/graphql/BaseGraphQLSchema.ts"],"sourcesContent":["import { CoreGraphQLSchemaFactory } from \"@webiny/handler-graphql/graphql/abstractions.core.js\";\nimport { Response, ErrorResponse } from \"@webiny/handler-graphql/responses.js\";\nimport { AiModelRegistry } from \"@webiny/api-core/features/ai/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { GetSettingsUseCase } from \"~/api/features/GetSettings/index.js\";\nimport { UpdateSettingsUseCase } from \"~/api/features/UpdateSettings/index.js\";\nimport { AiPowerUpsSettingsGraphQLMapper } from \"./abstractions.js\";\nimport {\n WB_GENERATE_PAGE_CONTENT_TASK_ID,\n type IWbGeneratePageContentTaskInput\n} from \"~/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js\";\n\nclass BaseGraphQLSchemaImpl implements CoreGraphQLSchemaFactory.Interface {\n async execute(\n builder: CoreGraphQLSchemaFactory.SchemaBuilder\n ): Promise<CoreGraphQLSchemaFactory.SchemaBuilder> {\n builder.addTypeDefs(/* GraphQL */ `\n type AiModel {\n providerId: String!\n providerName: String!\n modelId: String!\n modelName: String!\n }\n\n type AiPowerUpsQuery {\n listModels: [AiModel!]!\n getSettings: JSON\n }\n\n type AiPowerUpsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type AiPowerUpsSettingsResponse {\n data: JSON\n error: AiPowerUpsError\n }\n\n type AiPowerUpsMutation {\n updateSettings(input: JSON!): AiPowerUpsSettingsResponse!\n generatePageContent(\n prompt: String!\n components: JSON!\n tools: JSON!\n projectId: String\n excludedFileIds: [String!]\n readerPersonaId: String\n writerPersonaId: String\n ): JSON!\n }\n\n extend type Query {\n aiPowerUps: AiPowerUpsQuery\n }\n\n extend type Mutation {\n aiPowerUps: AiPowerUpsMutation\n }\n `);\n\n builder.addResolver({\n path: \"Query.aiPowerUps\",\n resolver: () => () => ({})\n });\n\n builder.addResolver({\n path: \"Mutation.aiPowerUps\",\n resolver: () => () => ({})\n });\n\n builder.addResolver({\n path: \"AiPowerUpsQuery.listModels\",\n dependencies: [AiModelRegistry],\n resolver: (registry: AiModelRegistry.Interface) => {\n return async () => registry.listModels();\n }\n });\n\n builder.addResolver({\n path: \"AiPowerUpsQuery.getSettings\",\n dependencies: [GetSettingsUseCase, AiPowerUpsSettingsGraphQLMapper],\n resolver: (\n useCase: GetSettingsUseCase.Interface,\n mapper: AiPowerUpsSettingsGraphQLMapper.Interface\n ) => {\n return async () => {\n const result = await useCase.execute();\n if (result.isFail()) {\n throw result.error;\n }\n\n return mapper.toApi(result.value);\n };\n }\n });\n\n builder.addResolver<IWbGeneratePageContentTaskInput>({\n path: \"AiPowerUpsMutation.generatePageContent\",\n dependencies: [TaskService],\n resolver: (taskService: TaskService.Interface) => {\n return async ({ args }) => {\n const result = await taskService.trigger<IWbGeneratePageContentTaskInput>({\n definition: WB_GENERATE_PAGE_CONTENT_TASK_ID,\n input: {\n prompt: args.prompt,\n components: args.components,\n tools: args.tools,\n projectId: args.projectId ?? null,\n excludedFileIds: args.excludedFileIds ?? null,\n readerPersonaId: args.readerPersonaId ?? null,\n writerPersonaId: args.writerPersonaId ?? null\n }\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return { id: result.value.id };\n };\n }\n });\n\n builder.addResolver<{ input: Record<string, unknown> }>({\n path: \"AiPowerUpsMutation.updateSettings\",\n dependencies: [\n GetSettingsUseCase,\n UpdateSettingsUseCase,\n AiPowerUpsSettingsGraphQLMapper\n ],\n resolver: (\n getSettings: GetSettingsUseCase.Interface,\n updateSettings: UpdateSettingsUseCase.Interface,\n mapper: AiPowerUpsSettingsGraphQLMapper.Interface\n ) => {\n return async ({ args }) => {\n const currentResult = await getSettings.execute();\n if (currentResult.isFail()) {\n return new ErrorResponse(currentResult.error);\n }\n\n const assembled = await mapper.fromApi(args.input, currentResult.value);\n const result = await updateSettings.execute(assembled);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(await mapper.toApi(result.value));\n };\n }\n });\n\n return builder;\n }\n}\n\nexport const BaseGraphQLSchema = CoreGraphQLSchemaFactory.createImplementation({\n implementation: BaseGraphQLSchemaImpl,\n dependencies: []\n});\n"],"names":["BaseGraphQLSchemaImpl","builder","AiModelRegistry","registry","GetSettingsUseCase","AiPowerUpsSettingsGraphQLMapper","useCase","mapper","result","TaskService","taskService","args","WB_GENERATE_PAGE_CONTENT_TASK_ID","UpdateSettingsUseCase","getSettings","updateSettings","currentResult","ErrorResponse","assembled","Response","BaseGraphQLSchema","CoreGraphQLSchemaFactory"],"mappings":";;;;;;;;AAYA,MAAMA;IACF,MAAM,QACFC,OAA+C,EACA;QAC/CA,QAAQ,WAAW,CAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6CnC,CAAC;QAEDA,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,UAAU,IAAM,IAAO,EAAC;QAC5B;QAEAA,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,UAAU,IAAM,IAAO,EAAC;QAC5B;QAEAA,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,cAAc;gBAACC;aAAgB;YAC/B,UAAU,CAACC,WACA,UAAYA,SAAS,UAAU;QAE9C;QAEAF,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,cAAc;gBAACG;gBAAoBC;aAAgC;YACnE,UAAU,CACNC,SACAC,SAEO;oBACH,MAAMC,SAAS,MAAMF,QAAQ,OAAO;oBACpC,IAAIE,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;oBAGtB,OAAOD,OAAO,KAAK,CAACC,OAAO,KAAK;gBACpC;QAER;QAEAP,QAAQ,WAAW,CAAkC;YACjD,MAAM;YACN,cAAc;gBAACQ;aAAY;YAC3B,UAAU,CAACC,cACA,OAAO,EAAEC,IAAI,EAAE;oBAClB,MAAMH,SAAS,MAAME,YAAY,OAAO,CAAkC;wBACtE,YAAYE;wBACZ,OAAO;4BACH,QAAQD,KAAK,MAAM;4BACnB,YAAYA,KAAK,UAAU;4BAC3B,OAAOA,KAAK,KAAK;4BACjB,WAAWA,KAAK,SAAS,IAAI;4BAC7B,iBAAiBA,KAAK,eAAe,IAAI;4BACzC,iBAAiBA,KAAK,eAAe,IAAI;4BACzC,iBAAiBA,KAAK,eAAe,IAAI;wBAC7C;oBACJ;oBAEA,IAAIH,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;oBAGtB,OAAO;wBAAE,IAAIA,OAAO,KAAK,CAAC,EAAE;oBAAC;gBACjC;QAER;QAEAP,QAAQ,WAAW,CAAqC;YACpD,MAAM;YACN,cAAc;gBACVG;gBACAS;gBACAR;aACH;YACD,UAAU,CACNS,aACAC,gBACAR,SAEO,OAAO,EAAEI,IAAI,EAAE;oBAClB,MAAMK,gBAAgB,MAAMF,YAAY,OAAO;oBAC/C,IAAIE,cAAc,MAAM,IACpB,OAAO,IAAIC,cAAcD,cAAc,KAAK;oBAGhD,MAAME,YAAY,MAAMX,OAAO,OAAO,CAACI,KAAK,KAAK,EAAEK,cAAc,KAAK;oBACtE,MAAMR,SAAS,MAAMO,eAAe,OAAO,CAACG;oBAE5C,IAAIV,OAAO,MAAM,IACb,OAAO,IAAIS,cAAcT,OAAO,KAAK;oBAGzC,OAAO,IAAIW,SAAS,MAAMZ,OAAO,KAAK,CAACC,OAAO,KAAK;gBACvD;QAER;QAEA,OAAOP;IACX;AACJ;AAEO,MAAMmB,oBAAoBC,yBAAyB,oBAAoB,CAAC;IAC3E,gBAAgBrB;IAChB,cAAc,EAAE;AACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/ai-powerups",
3
- "version": "6.4.8-beta.0",
3
+ "version": "6.4.9-beta.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -18,20 +18,20 @@
18
18
  "author": "Webiny Ltd.",
19
19
  "license": "Webiny Enterprise",
20
20
  "dependencies": {
21
- "@webiny/admin-ui": "6.4.8-beta.0",
22
- "@webiny/api-core": "6.4.8-beta.0",
23
- "@webiny/api-file-manager": "6.4.8-beta.0",
24
- "@webiny/api-websockets": "6.4.8-beta.0",
25
- "@webiny/app": "6.4.8-beta.0",
26
- "@webiny/app-admin": "6.4.8-beta.0",
27
- "@webiny/app-website-builder": "6.4.8-beta.0",
28
- "@webiny/app-websockets": "6.4.8-beta.0",
29
- "@webiny/background-tasks": "6.4.8-beta.0",
30
- "@webiny/feature": "6.4.8-beta.0",
31
- "@webiny/icons": "6.4.8-beta.0",
32
- "@webiny/project": "6.4.8-beta.0",
33
- "@webiny/project-aws": "6.4.8-beta.0",
34
- "@webiny/utils": "6.4.8-beta.0",
21
+ "@webiny/admin-ui": "6.4.9-beta.0",
22
+ "@webiny/api-core": "6.4.9-beta.0",
23
+ "@webiny/api-file-manager": "6.4.9-beta.0",
24
+ "@webiny/api-websockets": "6.4.9-beta.0",
25
+ "@webiny/app": "6.4.9-beta.0",
26
+ "@webiny/app-admin": "6.4.9-beta.0",
27
+ "@webiny/app-website-builder": "6.4.9-beta.0",
28
+ "@webiny/app-websockets": "6.4.9-beta.0",
29
+ "@webiny/background-tasks": "6.4.9-beta.0",
30
+ "@webiny/feature": "6.4.9-beta.0",
31
+ "@webiny/icons": "6.4.9-beta.0",
32
+ "@webiny/project": "6.4.9-beta.0",
33
+ "@webiny/project-aws": "6.4.9-beta.0",
34
+ "@webiny/utils": "6.4.9-beta.0",
35
35
  "ai": "7.0.18",
36
36
  "front-matter": "4.0.2",
37
37
  "lodash": "4.18.1",
@@ -42,11 +42,11 @@
42
42
  "zod": "4.4.3"
43
43
  },
44
44
  "devDependencies": {
45
- "@webiny/build-tools": "6.4.8-beta.0",
46
- "@webiny/handler-aws": "6.4.8-beta.0",
47
- "@webiny/handler-graphql": "6.4.8-beta.0",
48
- "@webiny/project-utils": "6.4.8-beta.0",
49
- "@webiny/wcp": "6.4.8-beta.0",
45
+ "@webiny/build-tools": "6.4.9-beta.0",
46
+ "@webiny/handler-aws": "6.4.9-beta.0",
47
+ "@webiny/handler-graphql": "6.4.9-beta.0",
48
+ "@webiny/project-utils": "6.4.9-beta.0",
49
+ "@webiny/wcp": "6.4.9-beta.0",
50
50
  "rimraf": "6.1.3",
51
51
  "typescript": "6.0.3",
52
52
  "vitest": "4.1.10"