@purpleschool/gptbot 0.12.99-stage → 0.13.2-stage

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.
@@ -5,6 +5,7 @@ export const CANVAS_TEMPLATE_ROUTES = {
5
5
  CREATE_CANVAS: (uuid: string) => `${uuid}`,
6
6
  CREATE_CANVAS_FROM_BODY: 'create-canvas',
7
7
  GENERATE: 'generate',
8
+ PRICE: 'price',
8
9
  GET_ALL: '',
9
10
  FIND_BY_UUID: (uuid: string) => `${uuid}`,
10
11
  UPDATE: (uuid: string) => `${uuid}`,
package/api/routes.ts CHANGED
@@ -437,6 +437,7 @@ export const REST_API = {
437
437
 
438
438
  CANVAS_TEMPLATE_PRIVATE: {
439
439
  GENERATE: `${ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.GENERATE}`,
440
+ PRICE: `${ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.PRICE}`,
440
441
  CREATE_CANVAS: (uuid: string) =>
441
442
  `${ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.CREATE_CANVAS(uuid)}`,
442
443
  FIND_BY_UUID: (uuid: string) =>
@@ -7,6 +7,7 @@ exports.CANVAS_TEMPLATE_ROUTES = {
7
7
  CREATE_CANVAS: (uuid) => `${uuid}`,
8
8
  CREATE_CANVAS_FROM_BODY: 'create-canvas',
9
9
  GENERATE: 'generate',
10
+ PRICE: 'price',
10
11
  GET_ALL: '',
11
12
  FIND_BY_UUID: (uuid) => `${uuid}`,
12
13
  UPDATE: (uuid) => `${uuid}`,
@@ -360,6 +360,7 @@ exports.REST_API = {
360
360
  },
361
361
  CANVAS_TEMPLATE_PRIVATE: {
362
362
  GENERATE: `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.GENERATE}`,
363
+ PRICE: `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.PRICE}`,
363
364
  CREATE_CANVAS: (uuid) => `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.CREATE_CANVAS(uuid)}`,
364
365
  FIND_BY_UUID: (uuid) => `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.FIND_BY_UUID(uuid)}`,
365
366
  GET_ALL: `${exports.ROOT}/${CONTROLLERS.CANVAS_TEMPLATE_PRIVATE_CONTROLLER}/${CONTROLLERS.CANVAS_TEMPLATE_ROUTES.GET_ALL}`,
@@ -7,8 +7,12 @@ var GenerateCanvasTemplateByPromptCommand;
7
7
  (function (GenerateCanvasTemplateByPromptCommand) {
8
8
  GenerateCanvasTemplateByPromptCommand.RequestSchema = zod_1.z.object({
9
9
  prompt: zod_1.z.string().trim().min(1),
10
+ canvasId: zod_1.z.string().uuid(),
10
11
  });
11
12
  GenerateCanvasTemplateByPromptCommand.ResponseSchema = zod_1.z.object({
12
- data: models_1.GeneratedCanvasTemplateSchema,
13
+ data: models_1.CanvasSchema.extend({
14
+ nodes: zod_1.z.array(models_1.CanvasNodeSchema),
15
+ edges: zod_1.z.array(models_1.CanvasEdgeSchema),
16
+ }),
13
17
  });
14
18
  })(GenerateCanvasTemplateByPromptCommand || (exports.GenerateCanvasTemplateByPromptCommand = GenerateCanvasTemplateByPromptCommand = {}));
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetCanvasTemplatePriceCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ var GetCanvasTemplatePriceCommand;
6
+ (function (GetCanvasTemplatePriceCommand) {
7
+ GetCanvasTemplatePriceCommand.RequestSchema = zod_1.z.object({
8
+ promptLength: zod_1.z.coerce.number().int().min(0),
9
+ });
10
+ GetCanvasTemplatePriceCommand.ResponseSchema = zod_1.z.object({
11
+ data: zod_1.z.object({
12
+ price: zod_1.z.number(),
13
+ charsUntilNextPriceIncrease: zod_1.z.number().nullable(),
14
+ charsUntilNextPriceDecrease: zod_1.z.number().nullable(),
15
+ }),
16
+ });
17
+ })(GetCanvasTemplatePriceCommand || (exports.GetCanvasTemplatePriceCommand = GetCanvasTemplatePriceCommand = {}));
@@ -19,6 +19,7 @@ __exportStar(require("./create-canvas-from-generated-template.command"), exports
19
19
  __exportStar(require("./create-canvas-template.command"), exports);
20
20
  __exportStar(require("./delete-canvas-template.command"), exports);
21
21
  __exportStar(require("./generate-canvas-template-by-prompt.command"), exports);
22
+ __exportStar(require("./get-canvas-template-price.command"), exports);
22
23
  __exportStar(require("./find-canvas-template-by-uuid.query"), exports);
23
24
  __exportStar(require("./find-canvas-templates.query"), exports);
24
25
  __exportStar(require("./update-canvas-template.command"), exports);
@@ -71,7 +71,7 @@ function calculateGptImage2PriceInStarsFromTokens(params) {
71
71
  sellStars: finalSellStars,
72
72
  };
73
73
  }
74
- function calculateGptImage2PriceInStarsByTier(params) {
74
+ function calculateGptImage2PriceInStarsByTier(params, rules, userHasActiveSubscriptionOrProduct) {
75
75
  const outputTokens = getGptImage2OutputTokensByTier({
76
76
  quality: params.quality,
77
77
  aspectRatio: params.aspectRatio,
@@ -84,5 +84,15 @@ function calculateGptImage2PriceInStarsByTier(params) {
84
84
  targetMargin: params.targetMargin,
85
85
  starPriceUsd: params.starPriceUsd,
86
86
  });
87
- return Object.assign({ outputTokens }, priced);
87
+ let finalSellStars = priced.sellStars;
88
+ for (const rule of rules !== null && rules !== void 0 ? rules : []) {
89
+ const condition = rule.condition;
90
+ if (condition.withoutSub && userHasActiveSubscriptionOrProduct === false) {
91
+ finalSellStars += rule.value;
92
+ }
93
+ }
94
+ if (params.quality === 'low') {
95
+ finalSellStars += 2;
96
+ }
97
+ return Object.assign(Object.assign({ outputTokens }, priced), { sellStars: finalSellStars });
88
98
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CanvasNodeDefinitionsWithConfigsSchema = exports.CanvasNodeDefinitionWithConfigSchema = exports.CanvasNodeDefinitionSchema = exports.CanvasNodeDefinitionToolConfigSchema = exports.CanvasTextGenerationConfigSchema = void 0;
3
+ exports.CanvasNodeDefinitionsWithConfigsSchema = exports.CanvasNodeDefinitionWithConfigSchema = exports.CanvasNodeDefinitionSchema = exports.PortDescriptions = exports.CanvasNodeDefinitionToolConfigSchema = exports.CanvasTextGenerationConfigSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const constants_1 = require("../constants");
6
6
  const icon_variants_schema_1 = require("./icon-variants.schema");
@@ -67,12 +67,19 @@ exports.CanvasNodeDefinitionToolConfigSchema = zod_1.z.discriminatedUnion('nodeT
67
67
  createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.varBlock),
68
68
  createCanvasNodeDefinitionNoConfigSchema(constants_1.CANVAS_NODE_TYPE.audioBlock),
69
69
  ]);
70
+ exports.PortDescriptions = zod_1.z.object({
71
+ inputs: zod_1.z.record(zod_1.z.nativeEnum(constants_1.INPUT_OUTPUT_TYPE), zod_1.z.string()),
72
+ outputs: zod_1.z.record(zod_1.z.nativeEnum(constants_1.INPUT_OUTPUT_TYPE), zod_1.z.string()),
73
+ });
70
74
  exports.CanvasNodeDefinitionSchema = zod_1.z.object({
71
75
  type: zod_1.z.nativeEnum(constants_1.CANVAS_NODE_TYPE),
72
76
  label: zod_1.z.string(),
77
+ description: zod_1.z.string(),
78
+ tags: zod_1.z.array(zod_1.z.string()),
73
79
  icons: icon_variants_schema_1.IconVariantCanvasSchema,
74
80
  inputPoints: zod_1.z.array(zod_1.z.nativeEnum(constants_1.INPUT_OUTPUT_TYPE)),
75
81
  outputPoints: zod_1.z.array(zod_1.z.nativeEnum(constants_1.INPUT_OUTPUT_TYPE)),
82
+ portDescriptions: exports.PortDescriptions,
76
83
  toolType: zod_1.z.nativeEnum(constants_1.TOOL_CONTENT_TYPE).nullable(),
77
84
  createdAt: zod_1.z.date(),
78
85
  updatedAt: zod_1.z.date(),
@@ -1,15 +1,19 @@
1
1
  import { z } from 'zod';
2
- import { GeneratedCanvasTemplateSchema } from '../../../models';
2
+ import { CanvasEdgeSchema, CanvasNodeSchema, CanvasSchema } from '../../../models';
3
3
 
4
4
  export namespace GenerateCanvasTemplateByPromptCommand {
5
5
  export const RequestSchema = z.object({
6
6
  prompt: z.string().trim().min(1),
7
+ canvasId: z.string().uuid(),
7
8
  });
8
9
 
9
10
  export type Request = z.infer<typeof RequestSchema>;
10
11
 
11
12
  export const ResponseSchema = z.object({
12
- data: GeneratedCanvasTemplateSchema,
13
+ data: CanvasSchema.extend({
14
+ nodes: z.array(CanvasNodeSchema),
15
+ edges: z.array(CanvasEdgeSchema),
16
+ }),
13
17
  });
14
18
 
15
19
  export type Response = z.infer<typeof ResponseSchema>;
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+
3
+ export namespace GetCanvasTemplatePriceCommand {
4
+ export const RequestSchema = z.object({
5
+ promptLength: z.coerce.number().int().min(0),
6
+ });
7
+
8
+ export type Request = z.infer<typeof RequestSchema>;
9
+
10
+ export const ResponseSchema = z.object({
11
+ data: z.object({
12
+ price: z.number(),
13
+ charsUntilNextPriceIncrease: z.number().nullable(),
14
+ charsUntilNextPriceDecrease: z.number().nullable(),
15
+ }),
16
+ });
17
+
18
+ export type Response = z.infer<typeof ResponseSchema>;
19
+ }
@@ -3,6 +3,7 @@ export * from './create-canvas-from-generated-template.command';
3
3
  export * from './create-canvas-template.command';
4
4
  export * from './delete-canvas-template.command';
5
5
  export * from './generate-canvas-template-by-prompt.command';
6
+ export * from './get-canvas-template-price.command';
6
7
  export * from './find-canvas-template-by-uuid.query';
7
8
  export * from './find-canvas-templates.query';
8
9
  export * from './update-canvas-template.command';
@@ -1,3 +1,5 @@
1
+ import { ImageModelPricingRules } from '../../models';
2
+
1
3
  export type GptImage2Quality = 'low' | 'medium' | 'high';
2
4
  export type GptImage2AspectRatio = '1:1' | '16:9' | '9:16' | '21:9';
3
5
  export type GptImage2ResolutionTier = '1K' | '2K' | '4K';
@@ -111,7 +113,7 @@ export function calculateGptImage2PriceInStarsByTier(params: {
111
113
  outputPricePer1MUsd?: number;
112
114
  targetMargin?: number;
113
115
  starPriceUsd?: number;
114
- }): {
116
+ }, rules: ImageModelPricingRules, userHasActiveSubscriptionOrProduct: boolean): {
115
117
  outputTokens: number;
116
118
  costUsd: number;
117
119
  sellUsd: number;
@@ -131,8 +133,22 @@ export function calculateGptImage2PriceInStarsByTier(params: {
131
133
  starPriceUsd: params.starPriceUsd,
132
134
  });
133
135
 
136
+ let finalSellStars = priced.sellStars;
137
+
138
+ for (const rule of rules ?? []) {
139
+ const condition = rule.condition;
140
+ if (condition.withoutSub && userHasActiveSubscriptionOrProduct === false) {
141
+ finalSellStars += rule.value;
142
+ }
143
+ }
144
+
145
+ if (params.quality === 'low') {
146
+ finalSellStars += 2;
147
+ }
148
+
134
149
  return {
135
150
  outputTokens,
136
151
  ...priced,
152
+ sellStars: finalSellStars,
137
153
  };
138
154
  }
@@ -81,12 +81,22 @@ export const CanvasNodeDefinitionToolConfigSchema = z.discriminatedUnion('nodeTy
81
81
  ]);
82
82
  export type CanvasNodeDefinitionToolConfig = z.infer<typeof CanvasNodeDefinitionToolConfigSchema>;
83
83
 
84
+ export const PortDescriptions = z.object({
85
+ inputs: z.record(z.nativeEnum(INPUT_OUTPUT_TYPE), z.string()),
86
+ outputs: z.record(z.nativeEnum(INPUT_OUTPUT_TYPE), z.string()),
87
+ });
88
+
89
+ export type PortDescriptionsType = z.infer<typeof PortDescriptions>;
90
+
84
91
  export const CanvasNodeDefinitionSchema = z.object({
85
92
  type: z.nativeEnum(CANVAS_NODE_TYPE),
86
93
  label: z.string(),
94
+ description: z.string(),
95
+ tags: z.array(z.string()),
87
96
  icons: IconVariantCanvasSchema,
88
97
  inputPoints: z.array(z.nativeEnum(INPUT_OUTPUT_TYPE)),
89
98
  outputPoints: z.array(z.nativeEnum(INPUT_OUTPUT_TYPE)),
99
+ portDescriptions: PortDescriptions,
90
100
  toolType: z.nativeEnum(TOOL_CONTENT_TYPE).nullable(),
91
101
  createdAt: z.date(),
92
102
  updatedAt: z.date(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/gptbot",
3
- "version": "0.12.99-stage",
3
+ "version": "0.13.2-stage",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",