@purpleschool/gptbot 0.14.9-stage-2 → 0.14.11

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 (33) hide show
  1. package/api/controllers/http/canvas-cron.ts +5 -0
  2. package/api/controllers/http/files.ts +1 -0
  3. package/api/controllers/http/index.ts +1 -0
  4. package/api/routes.ts +3 -0
  5. package/build/api/controllers/http/canvas-cron.js +7 -0
  6. package/build/api/controllers/http/files.js +1 -0
  7. package/build/api/controllers/http/index.js +1 -0
  8. package/build/api/routes.js +3 -0
  9. package/build/commands/agents/agent-dialog/send-agent-dialog-admin-reply.command.js +7 -2
  10. package/build/commands/ai-studio/canvas/index.js +1 -0
  11. package/build/commands/ai-studio/canvas/recover-stale-nodes.command.js +14 -0
  12. package/build/commands/b2b-compatible/anthropic-messages.command.js +1 -1
  13. package/build/commands/tools/tts/tts.command.js +5 -0
  14. package/build/constants/ai-model/enums/ai-model-tag.enum.js +7 -0
  15. package/build/constants/ai-model/enums/index.js +1 -0
  16. package/build/constants/subscription/free-subscription.constant.js +4 -4
  17. package/build/models/ai-model.schema.js +4 -0
  18. package/build/models/canvas-node.schema.js +1 -0
  19. package/build/models/tools/image-generation/image-generation-model.schema.js +2 -0
  20. package/build/models/tools/video/video-model.schema.js +2 -0
  21. package/commands/agents/agent-dialog/send-agent-dialog-admin-reply.command.ts +10 -5
  22. package/commands/ai-studio/canvas/index.ts +1 -0
  23. package/commands/ai-studio/canvas/recover-stale-nodes.command.ts +13 -0
  24. package/commands/b2b-compatible/anthropic-messages.command.ts +1 -1
  25. package/commands/tools/tts/tts.command.ts +6 -0
  26. package/constants/ai-model/enums/ai-model-tag.enum.ts +3 -0
  27. package/constants/ai-model/enums/index.ts +1 -0
  28. package/constants/subscription/free-subscription.constant.ts +4 -4
  29. package/models/ai-model.schema.ts +5 -1
  30. package/models/canvas-node.schema.ts +1 -0
  31. package/models/tools/image-generation/image-generation-model.schema.ts +2 -0
  32. package/models/tools/video/video-model.schema.ts +2 -0
  33. package/package.json +1 -1
@@ -0,0 +1,5 @@
1
+ export const CANVAS_CRON_PRIVATE_CONTROLLER = 'private/canvas/cron' as const;
2
+
3
+ export const CANVAS_CRON_ROUTES = {
4
+ RECOVER_STALE_NODES: 'recover-stale-nodes',
5
+ } as const;
@@ -4,6 +4,7 @@ export const FILE_PUBLIC_CONTROLLER = 'public/file' as const;
4
4
  export const FILE_ROUTES = {
5
5
  DELETE: (uuid: string) => `${uuid}`,
6
6
  UPLOAD: 'upload',
7
+ UPLOAD_PUBLIC: 'upload-public',
7
8
  UPLOAD_FILE: 'upload-file',
8
9
  UPLOAD_IMAGE: 'upload-image',
9
10
  CALCULATE_TEXT_FILE_COST: (uuid: string) => `cost/text/${uuid}`,
@@ -6,6 +6,7 @@ export * from './ai-vendor';
6
6
  export * from './auth';
7
7
  export * from './blog';
8
8
  export * from './canvas';
9
+ export * from './canvas-cron';
9
10
  export * from './canvas-node-definition';
10
11
  export * from './canvas-node';
11
12
  export * from './canvas-edge';
package/api/routes.ts CHANGED
@@ -633,6 +633,9 @@ export const REST_API = {
633
633
  DELETE: (uuid: string) =>
634
634
  `${ROOT}/${CONTROLLERS.CANVAS_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_ROUTES.DELETE(uuid)}`,
635
635
  },
636
+ CANVAS_CRON: {
637
+ RECOVER_STALE_NODES: `${ROOT}/${CONTROLLERS.CANVAS_CRON_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_CRON_ROUTES.RECOVER_STALE_NODES}`,
638
+ },
636
639
  USER_TO_PRODUCT: {
637
640
  FIND_BY_UUID: (uuid: string) =>
638
641
  `${ROOT}/${CONTROLLERS.USER_TO_PRODUCT_CONTROLLER}/${CONTROLLERS.USER_TO_PRODUCT_ROUTES.FIND_BY_UUID(uuid)}`,
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CANVAS_CRON_ROUTES = exports.CANVAS_CRON_PRIVATE_CONTROLLER = void 0;
4
+ exports.CANVAS_CRON_PRIVATE_CONTROLLER = 'private/canvas/cron';
5
+ exports.CANVAS_CRON_ROUTES = {
6
+ RECOVER_STALE_NODES: 'recover-stale-nodes',
7
+ };
@@ -6,6 +6,7 @@ exports.FILE_PUBLIC_CONTROLLER = 'public/file';
6
6
  exports.FILE_ROUTES = {
7
7
  DELETE: (uuid) => `${uuid}`,
8
8
  UPLOAD: 'upload',
9
+ UPLOAD_PUBLIC: 'upload-public',
9
10
  UPLOAD_FILE: 'upload-file',
10
11
  UPLOAD_IMAGE: 'upload-image',
11
12
  CALCULATE_TEXT_FILE_COST: (uuid) => `cost/text/${uuid}`,
@@ -22,6 +22,7 @@ __exportStar(require("./ai-vendor"), exports);
22
22
  __exportStar(require("./auth"), exports);
23
23
  __exportStar(require("./blog"), exports);
24
24
  __exportStar(require("./canvas"), exports);
25
+ __exportStar(require("./canvas-cron"), exports);
25
26
  __exportStar(require("./canvas-node-definition"), exports);
26
27
  __exportStar(require("./canvas-node"), exports);
27
28
  __exportStar(require("./canvas-edge"), exports);
@@ -488,6 +488,9 @@ exports.REST_API = {
488
488
  UPDATE: (uuid) => `${exports.ROOT}/${CONTROLLERS.CANVAS_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_ROUTES.UPDATE(uuid)}`,
489
489
  DELETE: (uuid) => `${exports.ROOT}/${CONTROLLERS.CANVAS_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_ROUTES.DELETE(uuid)}`,
490
490
  },
491
+ CANVAS_CRON: {
492
+ RECOVER_STALE_NODES: `${exports.ROOT}/${CONTROLLERS.CANVAS_CRON_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_CRON_ROUTES.RECOVER_STALE_NODES}`,
493
+ },
491
494
  USER_TO_PRODUCT: {
492
495
  FIND_BY_UUID: (uuid) => `${exports.ROOT}/${CONTROLLERS.USER_TO_PRODUCT_CONTROLLER}/${CONTROLLERS.USER_TO_PRODUCT_ROUTES.FIND_BY_UUID(uuid)}`,
493
496
  UPDATE: (uuid) => `${exports.ROOT}/${CONTROLLERS.USER_TO_PRODUCT_CONTROLLER}/${CONTROLLERS.USER_TO_PRODUCT_ROUTES.UPDATE(uuid)}`,
@@ -8,10 +8,15 @@ var SendAgentDialogAdminReplyCommand;
8
8
  dialogId: zod_1.z.string().uuid(),
9
9
  });
10
10
  SendAgentDialogAdminReplyCommand.RequestQuerySchema = zod_1.z.object({});
11
- SendAgentDialogAdminReplyCommand.RequestBodySchema = zod_1.z.object({
11
+ SendAgentDialogAdminReplyCommand.RequestBodySchema = zod_1.z
12
+ .object({
12
13
  text: zod_1.z.string().optional(),
13
14
  images: zod_1.z.array(zod_1.z.string()).default([]),
14
- attachments: zod_1.z.array(zod_1.z.string()).optional(),
15
+ fileIds: zod_1.z.array(zod_1.z.string().uuid()).default([]),
16
+ })
17
+ .refine((data) => data.text || data.images.length > 0 || data.fileIds.length > 0, {
18
+ message: 'Message must contain text, images, or files',
19
+ path: ['text'],
15
20
  });
16
21
  SendAgentDialogAdminReplyCommand.ResponseSchema = zod_1.z.object({
17
22
  data: zod_1.z.object({
@@ -24,3 +24,4 @@ __exportStar(require("./save-canvas.command"), exports);
24
24
  __exportStar(require("./update-canvas.command"), exports);
25
25
  __exportStar(require("./execute-graph-by-node.command"), exports);
26
26
  __exportStar(require("./get-price.query"), exports);
27
+ __exportStar(require("./recover-stale-nodes.command"), exports);
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RecoverStaleNodesCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ var RecoverStaleNodesCommand;
6
+ (function (RecoverStaleNodesCommand) {
7
+ RecoverStaleNodesCommand.RequestSchema = zod_1.z
8
+ .object({
9
+ staleMinutes: zod_1.z.number().int().positive().default(5),
10
+ maxStaleMinutes: zod_1.z.number().int().positive().default(60),
11
+ limit: zod_1.z.number().int().positive().default(50),
12
+ })
13
+ .default({});
14
+ })(RecoverStaleNodesCommand || (exports.RecoverStaleNodesCommand = RecoverStaleNodesCommand = {}));
@@ -118,7 +118,7 @@ var AnthropicMessagesCommand;
118
118
  AnthropicMessagesCommand.BodySchema = zod_1.z
119
119
  .object({
120
120
  model: zod_1.z.string(),
121
- max_tokens: zod_1.z.number().int().positive(),
121
+ max_tokens: zod_1.z.number().int().positive().optional(),
122
122
  messages: zod_1.z.array(exports.AnthropicMessageSchema).min(1),
123
123
  system: zod_1.z.union([zod_1.z.string(), zod_1.z.array(exports.AnthropicSystemContentBlockSchema)]).optional(),
124
124
  stream: zod_1.z.boolean().optional(),
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TTSCommand = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const models_1 = require("../../../models");
6
+ const TTSReferenceSchema = zod_1.z.object({
7
+ audioUrl: zod_1.z.string().url(),
8
+ text: zod_1.z.string(),
9
+ });
6
10
  var TTSCommand;
7
11
  (function (TTSCommand) {
8
12
  TTSCommand.RequestSchema = zod_1.z.object({
@@ -19,6 +23,7 @@ var TTSCommand;
19
23
  })
20
24
  .optional()
21
25
  .default({}),
26
+ references: zod_1.z.array(TTSReferenceSchema).optional().default([]),
22
27
  });
23
28
  TTSCommand.ResponseSchema = zod_1.z.object({
24
29
  data: models_1.ToolJobSchema,
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AI_MODEL_TAG = void 0;
4
+ var AI_MODEL_TAG;
5
+ (function (AI_MODEL_TAG) {
6
+ AI_MODEL_TAG["RECOMMENDED"] = "recommended";
7
+ })(AI_MODEL_TAG || (exports.AI_MODEL_TAG = AI_MODEL_TAG = {}));
@@ -18,3 +18,4 @@ __exportStar(require("./ai-model-config-selector-type.enum"), exports);
18
18
  __exportStar(require("./ai-model-feature.enum"), exports);
19
19
  __exportStar(require("./ai-model-status.enum"), exports);
20
20
  __exportStar(require("./ai-model-strategy.enum"), exports);
21
+ __exportStar(require("./ai-model-tag.enum"), exports);
@@ -16,12 +16,12 @@ exports.FREE_SUBSCRIPTION_DATA = {
16
16
  plan: enums_1.SUBSCRIPTION_PLAN.mock,
17
17
  icons: {
18
18
  light: {
19
- svg: 'https://rugpt.hb.bizmrg.com/images/images/81b60ce5-b687-43ff-85dd-e4e47c8e81e9.svg',
20
- png: 'https://rugpt.hb.bizmrg.com/images/images/e1bb1acd-a387-4596-8fd5-0159f692ff11.png',
19
+ svg: 'https://rugpt.storage.rugpt.io/images/images/81b60ce5-b687-43ff-85dd-e4e47c8e81e9.svg',
20
+ png: 'https://rugpt.storage.rugpt.io/images/images/e1bb1acd-a387-4596-8fd5-0159f692ff11.png',
21
21
  },
22
22
  dark: {
23
- svg: 'https://rugpt.hb.bizmrg.com/images/images/ac095d48-a66b-4862-82c7-eb120b5bd467.svg',
24
- png: 'https://rugpt.hb.bizmrg.com/images/images/e2208949-a73a-4137-b5bd-760599a70691.png',
23
+ svg: 'https://rugpt.storage.rugpt.io/images/images/ac095d48-a66b-4862-82c7-eb120b5bd467.svg',
24
+ png: 'https://rugpt.storage.rugpt.io/images/images/e2208949-a73a-4137-b5bd-760599a70691.png',
25
25
  },
26
26
  },
27
27
  interval: '',
@@ -13,6 +13,8 @@ exports.AiModelSchema = zod_1.z.object({
13
13
  tokenMultiplicator: zod_1.z.number(),
14
14
  freeTokenMultiplicator: zod_1.z.number(),
15
15
  order: zod_1.z.number(),
16
+ tags: zod_1.z.array(zod_1.z.nativeEnum(constants_1.AI_MODEL_TAG)),
17
+ hint: zod_1.z.string().nullable(),
16
18
  canUse: zod_1.z.optional(zod_1.z.boolean()),
17
19
  status: zod_1.z.nativeEnum(constants_1.AI_MODEL_STATUS),
18
20
  features: zod_1.z.array(zod_1.z.nativeEnum(constants_1.AI_MODEL_FEATURE)),
@@ -33,6 +35,8 @@ exports.AiModelSchema = zod_1.z.object({
33
35
  updatedAt: zod_1.z.date(),
34
36
  });
35
37
  exports.CreateAiModelSchema = exports.AiModelSchema.extend({
38
+ tags: zod_1.z.array(zod_1.z.nativeEnum(constants_1.AI_MODEL_TAG)).default([]),
39
+ hint: zod_1.z.string().nullable().default(null),
36
40
  model: zod_1.z.string(),
37
41
  maxInputTokens: zod_1.z.number(),
38
42
  });
@@ -212,6 +212,7 @@ exports.CanvasNodeBaseSchema = zod_1.z.object({
212
212
  status: zod_1.z.nativeEnum(constants_1.NODE_RUN_STATUS),
213
213
  toolJobId: zod_1.z.string().uuid().nullable(),
214
214
  params: zod_1.z.unknown().nullable(),
215
+ isParamsChanged: zod_1.z.boolean().optional(),
215
216
  output: zod_1.z.unknown().nullable(),
216
217
  error: exports.CanvasNodeErrorSchema.nullable(),
217
218
  createdAt: zod_1.z.date(),
@@ -31,6 +31,8 @@ exports.ImageGenerationModelSchema = zod_1.z.object({
31
31
  uuid: zod_1.z.string().uuid(),
32
32
  title: zod_1.z.string(),
33
33
  description: zod_1.z.string(),
34
+ tags: zod_1.z.array(zod_1.z.string()),
35
+ hint: zod_1.z.string().nullable(),
34
36
  order: zod_1.z.number(),
35
37
  status: zod_1.z.string(),
36
38
  price: zod_1.z.number(),
@@ -75,6 +75,8 @@ exports.VideoModelSchema = zod_1.z.object({
75
75
  uuid: zod_1.z.string(),
76
76
  title: zod_1.z.string(),
77
77
  description: zod_1.z.string(),
78
+ tags: zod_1.z.array(zod_1.z.string()),
79
+ hint: zod_1.z.string().nullable(),
78
80
  pricePerSecond: zod_1.z.number(),
79
81
  order: zod_1.z.number(),
80
82
  isNew: zod_1.z.boolean(),
@@ -9,11 +9,16 @@ export namespace SendAgentDialogAdminReplyCommand {
9
9
  export const RequestQuerySchema = z.object({});
10
10
  export type RequestQuery = z.infer<typeof RequestQuerySchema>;
11
11
 
12
- export const RequestBodySchema = z.object({
13
- text: z.string().optional(),
14
- images: z.array(z.string()).default([]),
15
- attachments: z.array(z.string()).optional(),
16
- });
12
+ export const RequestBodySchema = z
13
+ .object({
14
+ text: z.string().optional(),
15
+ images: z.array(z.string()).default([]),
16
+ fileIds: z.array(z.string().uuid()).default([]),
17
+ })
18
+ .refine((data) => data.text || data.images.length > 0 || data.fileIds.length > 0, {
19
+ message: 'Message must contain text, images, or files',
20
+ path: ['text'],
21
+ });
17
22
  export type RequestBody = z.infer<typeof RequestBodySchema>;
18
23
 
19
24
  export const ResponseSchema = z.object({
@@ -8,3 +8,4 @@ export * from './save-canvas.command';
8
8
  export * from './update-canvas.command';
9
9
  export * from './execute-graph-by-node.command';
10
10
  export * from './get-price.query';
11
+ export * from './recover-stale-nodes.command';
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+
3
+ export namespace RecoverStaleNodesCommand {
4
+ export const RequestSchema = z
5
+ .object({
6
+ staleMinutes: z.number().int().positive().default(5),
7
+ maxStaleMinutes: z.number().int().positive().default(60),
8
+ limit: z.number().int().positive().default(50),
9
+ })
10
+ .default({});
11
+
12
+ export type Request = z.infer<typeof RequestSchema>;
13
+ }
@@ -134,7 +134,7 @@ export namespace AnthropicMessagesCommand {
134
134
  export const BodySchema = z
135
135
  .object({
136
136
  model: z.string(),
137
- max_tokens: z.number().int().positive(),
137
+ max_tokens: z.number().int().positive().optional(),
138
138
  messages: z.array(AnthropicMessageSchema).min(1),
139
139
  system: z.union([z.string(), z.array(AnthropicSystemContentBlockSchema)]).optional(),
140
140
  stream: z.boolean().optional(),
@@ -1,6 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  import { ToolJobSchema } from '../../../models';
3
3
 
4
+ const TTSReferenceSchema = z.object({
5
+ audioUrl: z.string().url(),
6
+ text: z.string(),
7
+ });
8
+
4
9
  export namespace TTSCommand {
5
10
  export const RequestSchema = z.object({
6
11
  modelId: z.string().uuid(),
@@ -16,6 +21,7 @@ export namespace TTSCommand {
16
21
  })
17
22
  .optional()
18
23
  .default({}),
24
+ references: z.array(TTSReferenceSchema).optional().default([]),
19
25
  });
20
26
 
21
27
  export type Request = z.infer<typeof RequestSchema>;
@@ -0,0 +1,3 @@
1
+ export enum AI_MODEL_TAG {
2
+ RECOMMENDED = 'recommended',
3
+ }
@@ -2,3 +2,4 @@ export * from './ai-model-config-selector-type.enum';
2
2
  export * from './ai-model-feature.enum';
3
3
  export * from './ai-model-status.enum';
4
4
  export * from './ai-model-strategy.enum';
5
+ export * from './ai-model-tag.enum';
@@ -19,12 +19,12 @@ export const FREE_SUBSCRIPTION_DATA = {
19
19
  plan: SUBSCRIPTION_PLAN.mock,
20
20
  icons: {
21
21
  light: {
22
- svg: 'https://rugpt.hb.bizmrg.com/images/images/81b60ce5-b687-43ff-85dd-e4e47c8e81e9.svg',
23
- png: 'https://rugpt.hb.bizmrg.com/images/images/e1bb1acd-a387-4596-8fd5-0159f692ff11.png',
22
+ svg: 'https://rugpt.storage.rugpt.io/images/images/81b60ce5-b687-43ff-85dd-e4e47c8e81e9.svg',
23
+ png: 'https://rugpt.storage.rugpt.io/images/images/e1bb1acd-a387-4596-8fd5-0159f692ff11.png',
24
24
  },
25
25
  dark: {
26
- svg: 'https://rugpt.hb.bizmrg.com/images/images/ac095d48-a66b-4862-82c7-eb120b5bd467.svg',
27
- png: 'https://rugpt.hb.bizmrg.com/images/images/e2208949-a73a-4137-b5bd-760599a70691.png',
26
+ svg: 'https://rugpt.storage.rugpt.io/images/images/ac095d48-a66b-4862-82c7-eb120b5bd467.svg',
27
+ png: 'https://rugpt.storage.rugpt.io/images/images/e2208949-a73a-4137-b5bd-760599a70691.png',
28
28
  },
29
29
  },
30
30
  interval: '',
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { AI_MODEL_FEATURE, AI_MODEL_STATUS } from '../constants';
2
+ import { AI_MODEL_FEATURE, AI_MODEL_STATUS, AI_MODEL_TAG } from '../constants';
3
3
  import { AiModelConfigSchema } from './ai-model-config.schema';
4
4
 
5
5
  export const AiModelSchema = z.object({
@@ -11,6 +11,8 @@ export const AiModelSchema = z.object({
11
11
  tokenMultiplicator: z.number(),
12
12
  freeTokenMultiplicator: z.number(),
13
13
  order: z.number(),
14
+ tags: z.array(z.nativeEnum(AI_MODEL_TAG)),
15
+ hint: z.string().nullable(),
14
16
  canUse: z.optional(z.boolean()),
15
17
  status: z.nativeEnum(AI_MODEL_STATUS),
16
18
  features: z.array(z.nativeEnum(AI_MODEL_FEATURE)),
@@ -34,6 +36,8 @@ export const AiModelSchema = z.object({
34
36
  export type AiModel = z.infer<typeof AiModelSchema>;
35
37
 
36
38
  export const CreateAiModelSchema = AiModelSchema.extend({
39
+ tags: z.array(z.nativeEnum(AI_MODEL_TAG)).default([]),
40
+ hint: z.string().nullable().default(null),
37
41
  model: z.string(),
38
42
  maxInputTokens: z.number(),
39
43
  });
@@ -332,6 +332,7 @@ export const CanvasNodeBaseSchema = z.object({
332
332
  status: z.nativeEnum(NODE_RUN_STATUS),
333
333
  toolJobId: z.string().uuid().nullable(),
334
334
  params: z.unknown().nullable(),
335
+ isParamsChanged: z.boolean().optional(),
335
336
  output: z.unknown().nullable(),
336
337
  error: CanvasNodeErrorSchema.nullable(),
337
338
  createdAt: z.date(),
@@ -40,6 +40,8 @@ export const ImageGenerationModelSchema = z.object({
40
40
  uuid: z.string().uuid(),
41
41
  title: z.string(),
42
42
  description: z.string(),
43
+ tags: z.array(z.string()),
44
+ hint: z.string().nullable(),
43
45
  order: z.number(),
44
46
  status: z.string(),
45
47
  price: z.number(),
@@ -82,6 +82,8 @@ export const VideoModelSchema = z.object({
82
82
  uuid: z.string(),
83
83
  title: z.string(),
84
84
  description: z.string(),
85
+ tags: z.array(z.string()),
86
+ hint: z.string().nullable(),
85
87
  pricePerSecond: z.number(),
86
88
  order: z.number(),
87
89
  isNew: z.boolean(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/gptbot",
3
- "version": "0.14.9-stage-2",
3
+ "version": "0.14.11",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",