@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.
- package/api/controllers/http/canvas-template.ts +1 -0
- package/api/routes.ts +1 -0
- package/build/api/controllers/http/canvas-template.js +1 -0
- package/build/api/routes.js +1 -0
- package/build/commands/ai-studio/canvas-template/generate-canvas-template-by-prompt.command.js +5 -1
- package/build/commands/ai-studio/canvas-template/get-canvas-template-price.command.js +17 -0
- package/build/commands/ai-studio/canvas-template/index.js +1 -0
- package/build/helpers/image-generation/calculate-gpt-image-2-price-with-margin.helper.js +12 -2
- package/build/models/canvas-node-definition.schema.js +8 -1
- package/commands/ai-studio/canvas-template/generate-canvas-template-by-prompt.command.ts +6 -2
- package/commands/ai-studio/canvas-template/get-canvas-template-price.command.ts +19 -0
- package/commands/ai-studio/canvas-template/index.ts +1 -0
- package/helpers/image-generation/calculate-gpt-image-2-price-with-margin.helper.ts +17 -1
- package/models/canvas-node-definition.schema.ts +10 -0
- package/package.json +1 -1
|
@@ -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) =>
|
package/build/api/routes.js
CHANGED
|
@@ -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}`,
|
package/build/commands/ai-studio/canvas-template/generate-canvas-template-by-prompt.command.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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 {
|
|
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:
|
|
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(),
|