feat: add flow edit

This commit is contained in:
xion 2024-09-26 21:08:15 +08:00
parent ad0da1feba
commit 482c63bab2
3 changed files with 72 additions and 15 deletions

View File

@ -31,7 +31,9 @@ app
key: 'list',
})
.define(async (ctx) => {
ctx.body = await PageModel.findAll();
ctx.body = await PageModel.findAll({
order: [['updatedAt', 'DESC']],
});
return ctx;
})
.addTo(app);
@ -42,25 +44,65 @@ app
key: 'update',
})
.define(async (ctx) => {
const { data, id, ...rest } = ctx.query.data;
const { data, id, title, type, description } = ctx.query.data;
if (id) {
const page = await PageModel.findByPk(id);
if (page) {
const newPage = await page.update({ data: data, ...rest });
const newPage = await page.update({ data: data, title, type, description });
ctx.body = newPage;
} else {
throw new CustomError('page not found');
}
} else if (data) {
const page = await PageModel.create({ data, ...rest });
const page = await PageModel.create({ data, title, type, description });
ctx.body = page;
}
})
.addTo(app);
app
.route('page', 'updateNode')
.define(async (ctx) => {
const { id, nodeData } = ctx.query.data;
if (!id) {
throw new CustomError('id is required');
}
const page = await PageModel.findByPk(id);
if (!page) {
throw new CustomError('page not found');
}
const { data } = page;
const { nodes = [] } = data;
let flag = false;
const newNodes = nodes.map((item) => {
if (item.id === nodeData.id) {
flag = true;
return nodeData;
}
return item;
});
if (!flag) {
newNodes.push(nodeData);
}
const newData = { ...data, nodes: newNodes };
const newPage = await page.update({ data: newData });
ctx.body = newPage;
return ctx;
})
.addTo(app);
app
.route({
path: 'page',
key: 'delete',
})
.define({
validator: {
id: {
required: true,
type: 'string',
},
},
})
.define(async (ctx) => {
const id = ctx.query.id;
const page = await PageModel.findByPk(id);

View File

@ -3,15 +3,20 @@ import { Prompt } from '@/models/prompt.ts';
import { chat } from '@/modules/ollama.ts';
import { CustomError } from '@abearxiong/router';
import { PromptTemplate } from '@kevisual/ai-graph';
import { v4 } from 'uuid';
app
.route('ai', 'run', { nextRoute: { id: 'runOllama' } })
.define({
validator: {
key: {
type: 'string',
required: true,
message: 'Prompt key is required',
data: {
type: 'object',
properties: {
key: {
type: 'string',
required: true,
message: 'Prompt key is required',
},
},
},
},
})
@ -23,6 +28,7 @@ app
throw new CustomError('Prompt key is required');
}
const prompt = await Prompt.findOne({ where: { key } });
console.log('prompt', 'key', key, prompt);
if (!prompt) {
throw new CustomError('Prompt not found');
}
@ -54,16 +60,16 @@ app
})
.define(async (ctx) => {
const prompt = ctx.state.prompt;
const uuid = v4();
if (!prompt) {
throw new CustomError('Prompt not found');
throw new CustomError('Prompt Template not found');
}
console.log('prompt', typeof prompt, prompt);
const res = await chat([
{
role: 'user',
content: prompt,
},
]);
ctx.body = res;
ctx.body = { id: uuid, ...res };
})
.addTo(app);

View File

@ -48,11 +48,19 @@ module.exports = {
loader: 'ts-loader',
options: {
allowTsInNodeModules: true,
transpileOnly: true, // 可选,加快构建速度
},
},
},
],
},
// 忽略特定警告
ignoreWarnings: [
{
message: /Critical dependency: the request of a dependency is an expression/,
},
],
resolve: {
extensions: ['.ts', '.js'],
alias: {
@ -60,9 +68,7 @@ module.exports = {
hexoid: 'hexoid/dist/index.js',
},
},
// externals: [
// // nodeExternals(),
// ],
externals: {
sequelize: 'commonjs sequelize',
'socket.io': 'commonjs socket.io',
@ -73,5 +79,8 @@ module.exports = {
node: {},
stats: {
errorDetails: true,
all: false,
errors: true,
warnings: true,
},
};