mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 10:12:51 +00:00
feat: 工作编排
This commit is contained in:
parent
c60fc829ae
commit
e8ff2f7a6e
|
|
@ -954,5 +954,26 @@ export const iconMap: any = {
|
|||
)
|
||||
])
|
||||
}
|
||||
},
|
||||
'app-magnify': {
|
||||
iconReader: () => {
|
||||
return h('i', [
|
||||
h(
|
||||
'svg',
|
||||
{
|
||||
style: { height: '100%', width: '100%' },
|
||||
viewBox: '0 0 1024 1024',
|
||||
version: '1.1',
|
||||
xmlns: 'http://www.w3.org/2000/svg'
|
||||
},
|
||||
[
|
||||
h('path', {
|
||||
d: 'M366.165333 593.749333a21.333333 21.333333 0 0 1 30.208 0l30.165334 30.165334a21.333333 21.333333 0 0 1 0 30.208l-170.752 170.666666H377.173333a21.333333 21.333333 0 0 1 21.333334 21.333334v42.666666a21.333333 21.333333 0 0 1-21.333334 21.333334H156.458667a42.538667 42.538667 0 0 1-42.666667-42.666667v-220.16a21.333333 21.333333 0 0 1 21.333333-21.333333h42.666667a21.333333 21.333333 0 0 1 21.333333 21.333333v113.493333l167.04-167.04z m500.992-480a42.538667 42.538667 0 0 1 42.666667 42.666667v220.16a21.333333 21.333333 0 0 1-21.333333 21.333333h-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-113.493333l-167.04 167.04a21.333333 21.333333 0 0 1-30.165334 0l-30.165333-30.165334a21.333333 21.333333 0 0 1 0-30.165333l170.709333-170.666667h-121.344a21.333333 21.333333 0 0 1-21.333333-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333333-21.333333h220.672z',
|
||||
fill: 'currentColor'
|
||||
})
|
||||
]
|
||||
)
|
||||
])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<NodeContainer :nodeModel="nodeModel">
|
||||
<el-form
|
||||
@submit.prevent
|
||||
:model="chat_data"
|
||||
:model="form_data"
|
||||
label-position="top"
|
||||
require-asterisk-position="right"
|
||||
class="mb-24"
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
}"
|
||||
>
|
||||
<el-input
|
||||
v-model="chat_data.name"
|
||||
v-model="form_data.name"
|
||||
maxlength="64"
|
||||
placeholder="请输入应用名称"
|
||||
show-word-limit
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
</el-form-item>
|
||||
<el-form-item label="应用描述">
|
||||
<el-input
|
||||
v-model="chat_data.desc"
|
||||
v-model="form_data.desc"
|
||||
placeholder="请输入应用描述"
|
||||
:rows="3"
|
||||
type="textarea"
|
||||
|
|
@ -38,7 +38,7 @@
|
|||
<el-form-item label="开场白">
|
||||
<MdEditor
|
||||
style="height: 150px"
|
||||
v-model="chat_data.prologue"
|
||||
v-model="form_data.prologue"
|
||||
:preview="false"
|
||||
:toolbars="[]"
|
||||
:footers="[]"
|
||||
|
|
@ -61,7 +61,7 @@ const form = {
|
|||
prologue:
|
||||
'您好,我是 MaxKB 小助手,您可以向我提出 MaxKB 使用问题。\n- MaxKB 主要功能有什么?\n- MaxKB 支持哪些大语言模型?\n- MaxKB 支持哪些文档类型?'
|
||||
}
|
||||
const chat_data = computed({
|
||||
const form_data = computed({
|
||||
get: () => {
|
||||
if (props.nodeModel.properties.node_data) {
|
||||
return props.nodeModel.properties.node_data
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@
|
|||
<el-card shadow="never" class="card-never" style="--el-card-padding: 12px">
|
||||
<el-form
|
||||
@submit.prevent
|
||||
:model="chat_data"
|
||||
:model="form_data"
|
||||
label-position="top"
|
||||
require-asterisk-position="right"
|
||||
class="mb-24"
|
||||
label-width="auto"
|
||||
ref="aiChatNodeFormRef"
|
||||
ref="questionNodeFormRef"
|
||||
>
|
||||
<el-form-item
|
||||
label="AI 模型"
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
}"
|
||||
>
|
||||
<el-select
|
||||
v-model="chat_data.model_id"
|
||||
v-model="form_data.model_id"
|
||||
placeholder="请选择 AI 模型"
|
||||
class="w-full"
|
||||
popper-class="select-model"
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
></span>
|
||||
<span>{{ item.name }}</span>
|
||||
</div>
|
||||
<el-icon class="check-icon" v-if="item.id === chat_data.model_id"
|
||||
<el-icon class="check-icon" v-if="item.id === form_data.model_id"
|
||||
><Check
|
||||
/></el-icon>
|
||||
</el-option>
|
||||
|
|
@ -67,7 +67,7 @@
|
|||
<span>{{ item.name }}</span>
|
||||
<span class="danger">(不可用)</span>
|
||||
</div>
|
||||
<el-icon class="check-icon" v-if="item.id === chat_data.model_id"
|
||||
<el-icon class="check-icon" v-if="item.id === form_data.model_id"
|
||||
><Check
|
||||
/></el-icon>
|
||||
</el-option>
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="角色设定">
|
||||
<el-input v-model="chat_data.system" placeholder="角色设定" />
|
||||
<el-input v-model="form_data.system" placeholder="角色设定" />
|
||||
</el-form-item>
|
||||
<el-form-item label="提示词" prop="prompt">
|
||||
<template #label>
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<el-input
|
||||
v-model="chat_data.prompt"
|
||||
v-model="form_data.prompt"
|
||||
:rows="6"
|
||||
type="textarea"
|
||||
maxlength="2048"
|
||||
|
|
@ -111,7 +111,7 @@
|
|||
</el-form-item>
|
||||
<el-form-item label="历史聊天记录">
|
||||
<el-input-number
|
||||
v-model="chat_data.dialogue_number"
|
||||
v-model="form_data.dialogue_number"
|
||||
:min="0"
|
||||
controls-position="right"
|
||||
class="w-full"
|
||||
|
|
@ -158,7 +158,7 @@ const form = {
|
|||
dialogue_number: 1
|
||||
}
|
||||
|
||||
const chat_data = computed({
|
||||
const form_data = computed({
|
||||
get: () => {
|
||||
if (props.nodeModel.properties.node_data) {
|
||||
return props.nodeModel.properties.node_data
|
||||
|
|
@ -173,7 +173,7 @@ const chat_data = computed({
|
|||
})
|
||||
const props = defineProps<{ nodeModel: any }>()
|
||||
|
||||
const aiChatNodeFormRef = ref<FormInstance>()
|
||||
const questionNodeFormRef = ref<FormInstance>()
|
||||
const createModelRef = ref<InstanceType<typeof CreateModelDialog>>()
|
||||
const selectProviderRef = ref<InstanceType<typeof SelectProviderDialog>>()
|
||||
|
||||
|
|
@ -181,7 +181,7 @@ const modelOptions = ref<any>(null)
|
|||
const providerOptions = ref<Array<Provider>>([])
|
||||
|
||||
const validate = () => {
|
||||
aiChatNodeFormRef.value?.validate()
|
||||
questionNodeFormRef.value?.validate()
|
||||
}
|
||||
|
||||
function getModel() {
|
||||
|
|
|
|||
|
|
@ -1,18 +1,60 @@
|
|||
<template>
|
||||
<NodeContainer :nodeModel="nodeModel">
|
||||
<el-card shadow="never" class="card-never" style="--el-card-padding: 12px">
|
||||
|
||||
<el-form
|
||||
@submit.prevent
|
||||
:model="form_data"
|
||||
label-position="top"
|
||||
require-asterisk-position="right"
|
||||
label-width="auto"
|
||||
ref="replyNodeFormRef"
|
||||
>
|
||||
<el-form-item label="回复内容">
|
||||
<MdEditor
|
||||
class=""
|
||||
style="height: 150px"
|
||||
v-model="form_data.content"
|
||||
:preview="false"
|
||||
:toolbars="[]"
|
||||
:footers="footers"
|
||||
>
|
||||
<template #defFooters>
|
||||
<el-button text>
|
||||
<AppIcon iconName="app-magnify" style="font-size: 16px"></AppIcon>
|
||||
</el-button>
|
||||
</template>
|
||||
</MdEditor>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</NodeContainer>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { set } from 'lodash'
|
||||
import NodeContainer from '@/workflow/common/NodeContainer.vue'
|
||||
import { MdEditor } from 'md-editor-v3'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { ref, computed, onMounted } from 'vue'
|
||||
|
||||
const props = defineProps<{ nodeModel: any }>()
|
||||
const form = {
|
||||
content: ''
|
||||
}
|
||||
const footers: any = [null, '=', 0]
|
||||
|
||||
const form_data = computed({
|
||||
get: () => {
|
||||
if (props.nodeModel.properties.node_data) {
|
||||
return props.nodeModel.properties.node_data
|
||||
} else {
|
||||
set(props.nodeModel.properties, 'node_data', form)
|
||||
}
|
||||
return props.nodeModel.properties.node_data
|
||||
},
|
||||
set: (value) => {
|
||||
set(props.nodeModel.properties, 'node_data', value)
|
||||
}
|
||||
})
|
||||
// onMounted(() => {
|
||||
// set(props.nodeModel, 'validate', validate)
|
||||
// })
|
||||
|
|
|
|||
Loading…
Reference in New Issue