Commit ffe42966 authored by mhw's avatar mhw

版本迭代

parent 1a71920d
module.exports = { module.exports = {
presets: [ presets: [
'@vue/cli-plugin-babel/preset' '@vue/cli-plugin-babel/preset'
],
plugins: [
[
'prismjs',
{
languages: ['javascript', 'css', 'markup', 'java', 'python'],
plugins: ['line-numbers'], // 配置显示行号插件
theme: 'twilight', // 主体名称
css: true
}]
] ]
} }
...@@ -3790,6 +3790,12 @@ ...@@ -3790,6 +3790,12 @@
"@babel/helper-define-polyfill-provider": "^0.4.3" "@babel/helper-define-polyfill-provider": "^0.4.3"
} }
}, },
"babel-plugin-prismjs": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/babel-plugin-prismjs/-/babel-plugin-prismjs-2.1.0.tgz",
"integrity": "sha512-ehzSKYfeAz4U78zi/sfwsjDPlq0LvDKxNefcZTJ/iKBu+plsHsLqZhUeGf1+82LAcA35UZGbU6ksEx2Utphc/g==",
"dev": true
},
"babel-plugin-syntax-object-rest-spread": { "babel-plugin-syntax-object-rest-spread": {
"version": "6.13.0", "version": "6.13.0",
"resolved": "https://registry.npmmirror.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "resolved": "https://registry.npmmirror.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
...@@ -15867,6 +15873,11 @@ ...@@ -15867,6 +15873,11 @@
} }
} }
}, },
"prismjs": {
"version": "1.29.0",
"resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz",
"integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q=="
},
"process": { "process": {
"version": "0.11.10", "version": "0.11.10",
"resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz", "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
......
...@@ -22,4 +22,13 @@ export default class ModelVersion { ...@@ -22,4 +22,13 @@ export default class ModelVersion {
static delete (sender, params, axiosOption, httpOption) { static delete (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/modelVersion/delete', 'post', params, axiosOption, httpOption); return sender.doUrl('/admin/app/modelVersion/delete', 'post', params, axiosOption, httpOption);
} }
static change (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/modelVersion/change', 'post', params, axiosOption, httpOption);
}
static listModels (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/modelVersion/listModels', 'post', params, axiosOption, httpOption);
}
static stop (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/modelVersion/stop', 'post', params, axiosOption, httpOption);
}
} }
module.exports = { module.exports = {
baseUrl: 'http://192.168.0.34:8082/', baseUrl: 'http://192.168.0.36:8082/',
wsUrl: 'ws://192.168.0.36:7860/', wsUrl: 'ws://192.168.0.36:7860/',
projectName: '灵境大模型平台' projectName: '灵境大模型平台'
} }
...@@ -6,7 +6,7 @@ import { getToken, setToken, getAppId } from '@/utils'; ...@@ -6,7 +6,7 @@ import { getToken, setToken, getAppId } from '@/utils';
// 创建axios实例 // 创建axios实例
const service = axios.create({ const service = axios.create({
timeout: 1000 * 30, timeout: 1000 * 60 * 5,
withCredentials: true, withCredentials: true,
headers: { headers: {
// 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' // 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
......
...@@ -244,7 +244,7 @@ const DataAnnotationState = new DictionaryBase('发布状态', [ ...@@ -244,7 +244,7 @@ const DataAnnotationState = new DictionaryBase('发布状态', [
]); ]);
Vue.prototype.DataAnnotationState = DataAnnotationState; Vue.prototype.DataAnnotationState = DataAnnotationState;
const ModelTrainingMode = new DictionaryBase('发布状态', [ const ModelTrainingMode = new DictionaryBase('模型训练模式', [
{ {
id: 0, id: 0,
name: 'SFT', name: 'SFT',
...@@ -290,7 +290,7 @@ const VersionStatus = new DictionaryBase('版本状态', [ ...@@ -290,7 +290,7 @@ const VersionStatus = new DictionaryBase('版本状态', [
]); ]);
Vue.prototype.VersionStatus = VersionStatus; Vue.prototype.VersionStatus = VersionStatus;
const ModelCreationMode = new DictionaryBase('模型创建式', [ const ModelCreationMode = new DictionaryBase('模型创建式', [
{ {
id: 0, id: 0,
name: '创建为已有模型新版本', name: '创建为已有模型新版本',
...@@ -338,18 +338,17 @@ Vue.prototype.TaskType = TaskType; ...@@ -338,18 +338,17 @@ Vue.prototype.TaskType = TaskType;
// ]); // ]);
// Vue.prototype.SftTaskType = SftTaskType; // Vue.prototype.SftTaskType = SftTaskType;
const TaskStatus = new DictionaryBase('任务状态', [ const TaskStatus = new DictionaryBase('任务状态', [
{
id: 0,
name: '待评估',
symbol: 'ToBeTrained'
},
{ {
id: -1, id: -1,
name: '失败', name: '失败',
symbol: 'err' symbol: 'err'
}, },
{
id: 0,
name: '待进行',
symbol: 'ToBeTrained'
},
{ {
id: 1, id: 1,
name: '已完成', name: '已完成',
...@@ -357,8 +356,13 @@ const TaskStatus = new DictionaryBase('任务状态', [ ...@@ -357,8 +356,13 @@ const TaskStatus = new DictionaryBase('任务状态', [
}, },
{ {
id: 2, id: 2,
name: '评估中断', name: '中断',
symbol: 'stopped' symbol: 'stopped'
},
{
id: 3,
name: '进行中',
symbol: 'underway'
} }
]); ]);
Vue.prototype.TaskStatus = TaskStatus; Vue.prototype.TaskStatus = TaskStatus;
...@@ -414,6 +418,12 @@ const ModeOfSpeaking = new DictionaryBase('对话模式', [ ...@@ -414,6 +418,12 @@ const ModeOfSpeaking = new DictionaryBase('对话模式', [
]); ]);
Vue.prototype.ModeOfSpeaking = ModeOfSpeaking; Vue.prototype.ModeOfSpeaking = ModeOfSpeaking;
const RunningStatus = new DictionaryBase('运行状态', [ const RunningStatus = new DictionaryBase('运行状态', [
{
id: -1,
name: '训练失败',
symbol: 'TrainingFailure'
},
{ {
id: 0, id: 0,
name: '待训练', name: '待训练',
...@@ -430,9 +440,9 @@ const RunningStatus = new DictionaryBase('运行状态', [ ...@@ -430,9 +440,9 @@ const RunningStatus = new DictionaryBase('运行状态', [
symbol: 'TrainingInterruption' symbol: 'TrainingInterruption'
}, },
{ {
id: -1, id: 3,
name: '训练失败', name: '训练进行中',
symbol: 'TrainingFailure' symbol: 'TrainingUnderway'
} }
]); ]);
Vue.prototype.RunningStatus = RunningStatus; Vue.prototype.RunningStatus = RunningStatus;
......
...@@ -4,12 +4,14 @@ ...@@ -4,12 +4,14 @@
<div class="tableBox" > <div class="tableBox" >
<vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true }" :data="myDataSetPage.tableData.impl.dataList" min-height="96"> <vxe-table border show-header-overflow show-overflow :row-config="{ isHover: true }" :data="myDataSetPage.tableData.impl.dataList" min-height="96">
<!-- <vxe-column field="index" title="序号"></vxe-column> --> <!-- <vxe-column field="index" title="序号"></vxe-column> -->
<vxe-column field="content" title="文本内容摘要"></vxe-column> <vxe-column field="content" title="问题"></vxe-column>
<vxe-column field="answer" title="答案"></vxe-column>
<vxe-column field="operation" title="操作" width="100px"> <vxe-column field="operation" title="操作" width="150px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" :size="defaultFormItemSize" @click="check(scope.row)">查看</el-button> <el-button type="text" :size="defaultFormItemSize" @click="check(scope.row)">查看</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="label(scope.row)">标注</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">删除</el-button>
</template> </template>
</vxe-column> </vxe-column>
</vxe-table> </vxe-table>
...@@ -86,6 +88,9 @@ export default { ...@@ -86,6 +88,9 @@ export default {
} }
}); });
},
label (row) { // 标注
}, },
// del (item) { // del (item) {
// this.$confirm('是否确认删除', '提示', { // this.$confirm('是否确认删除', '提示', {
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
<el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">删除</el-button> <el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">删除</el-button>
<template v-if="scope.row.inputStatus !== 0"> <template v-if="scope.row.inputStatus !== 0">
<el-button type="text" :size="defaultFormItemSize" @click="particulars(scope.row)">详情</el-button> <el-button type="text" :size="defaultFormItemSize" @click="particulars(scope.row)">详情</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="label(scope.row)">标注</el-button> <!-- <el-button type="text" :size="defaultFormItemSize" @click="label(scope.row)">标注</el-button> -->
<el-dropdown style="margin-left:15px;font-size: 12px;color: #0092FF;" :size="defaultFormItemSize"> <el-dropdown style="margin-left:15px;font-size: 12px;color: #0092FF;" :size="defaultFormItemSize">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
更多<i class="el-icon-arrow-down el-icon--right"></i> 更多<i class="el-icon-arrow-down el-icon--right"></i>
......
...@@ -19,8 +19,7 @@ ...@@ -19,8 +19,7 @@
</el-form-item> </el-form-item>
<el-form-item label="模型创建⽅式:"> <el-form-item label="模型创建⽅式:">
<el-radio v-model="radio" label="0">创建为已有模型新版本</el-radio> <el-radio v-for="item in ModelCreationMode.getList()" :key="item.id" v-model="form.modelCompressDto.createMethod" :label="item.id">{{ item.name}}</el-radio>
<el-radio v-model="radio" label="1">创建为新模型</el-radio>
</el-form-item> </el-form-item>
<el-form-item label="选择已有模型:"> <el-form-item label="选择已有模型:">
<el-select v-model="value" placeholder="请选择"> <el-select v-model="value" placeholder="请选择">
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
<filter-box :item-width="350" @search="refresh()" @reset="onReset"> <filter-box :item-width="350" @search="refresh()" @reset="onReset">
<el-form-item <el-form-item
label="任务名称" label="数据集名称"
prop="formFilter.dataName" prop="formFilter.dataName"
label-width="120px" label-width="120px"
> >
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
class="filter-item" class="filter-item"
v-model="myDataSetPage.formFilter.dataName" v-model="myDataSetPage.formFilter.dataName"
:clearable="true" :clearable="true"
placeholder="任务名称" placeholder="数据集名称"
/> />
</el-form-item> </el-form-item>
</filter-box> </filter-box>
......
...@@ -50,7 +50,7 @@ export default { ...@@ -50,7 +50,7 @@ export default {
}, },
getPreviewCommand () { // 获取参数 getPreviewCommand () { // 获取参数
TuningRun.getPreviewCommand(this, {runId: this.item.runId}).then((res) => { TuningRun.getPreviewCommand(this, {runId: this.item.runId}).then((res) => {
this.wsData.data = JSON.parse(res.data) this.wsData.data = res.data
this.send(JSON.stringify(this.wsData)) this.send(JSON.stringify(this.wsData))
}) })
}, },
......
...@@ -92,7 +92,7 @@ export default { ...@@ -92,7 +92,7 @@ export default {
}, },
getPreviewCommand () { // 获取参数 getPreviewCommand () { // 获取参数
TuningRun.getPreviewCommand(this, {runId: this.item.runId}).then((res) => { TuningRun.getPreviewCommand(this, {runId: this.item.runId}).then((res) => {
this.wsData.data = JSON.parse(res.data) this.wsData.data = res.data
this.send(JSON.stringify(this.wsData)) this.send(JSON.stringify(this.wsData))
}) })
}, },
......
...@@ -64,7 +64,7 @@ export default { ...@@ -64,7 +64,7 @@ export default {
form: { form: {
'modelCompressDto': { 'modelCompressDto': {
'createMethod': undefined, 'createMethod': 0,
'sourceVersionId': undefined, 'sourceVersionId': undefined,
'targetModelId': undefined, 'targetModelId': undefined,
'taskDescribe': undefined, 'taskDescribe': undefined,
......
...@@ -9,12 +9,12 @@ ...@@ -9,12 +9,12 @@
</el-card> </el-card>
<el-card class="box-card"> <el-card class="box-card">
<el-descriptions title="压缩配置"> <el-descriptions title="压缩配置">
<el-descriptions-item label="源模型:">{{}}</el-descriptions-item> <el-descriptions-item label="源模型:">{{item.sourceVersionId}}</el-descriptions-item>
<el-descriptions-item label="压缩后模型:">{{}}</el-descriptions-item> <el-descriptions-item label="压缩后模型:">{{item.targetVersionId}}</el-descriptions-item>
<el-descriptions-item label="压缩策略:">{{}}</el-descriptions-item> <el-descriptions-item label="压缩策略:">INT8</el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-card> </el-card>
<el-card class="box-card"> <!-- <el-card class="box-card">
<el-descriptions title="任务日志"> <el-descriptions title="任务日志">
<el-descriptions-item > <el-descriptions-item >
<div class="logBox"> <div class="logBox">
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-card> </el-card> -->
</div> </div>
</template> </template>
......
...@@ -25,7 +25,11 @@ ...@@ -25,7 +25,11 @@
{{ TaskStatus.getValue(scope.row.taskStatus) }} {{ TaskStatus.getValue(scope.row.taskStatus) }}
</template> </template>
</vxe-column> </vxe-column>
<vxe-column field="sourceVersionId" title="源模型"></vxe-column> <vxe-column field="sourceVersionId" title="源模型">
<template slot-scope="scope">
{{ scope.row.modelTask.versionName }}
</template>
</vxe-column>
<vxe-column field="targetVersionId" title="压缩后模型"></vxe-column> <vxe-column field="targetVersionId" title="压缩后模型"></vxe-column>
<vxe-column field="createTime" title="创建时间"></vxe-column> <vxe-column field="createTime" title="创建时间"></vxe-column>
<vxe-column field="operation" title="操作"> <vxe-column field="operation" title="操作">
......
...@@ -5,7 +5,12 @@ ...@@ -5,7 +5,12 @@
<el-descriptions title="评估指标分析"> <el-descriptions title="评估指标分析">
<el-descriptions-item> <el-descriptions-item>
<div style="display: flex;flex-direction: row; justify-content: space-between; align-items: center;"> <div style="display: flex;flex-direction: row; justify-content: space-between; align-items: center;">
<div class="main" ref="main"></div> <div class="main" ref="main">
<div class="table-empty unified-font">
<img src="@/assets/img/empty.png">
<span>暂无数据</span>
</div>
</div>
<div style="width: calc(100% - 750px)"> <div style="width: calc(100% - 750px)">
<el-table :data="tableData"> <el-table :data="tableData">
......
<!-- 训练日志 --> <!-- 训练日志 -->
<template> <template>
<div> <div>
<el-card > <el-card>
<div v-html="logText" class="box-card" ref="logBox"> <div v-html="logText" class="box-card" ref="logBox" v-if="logText">
</div>
<div class="table-empty unified-font" v-else>
<img src="@/assets/img/empty.png">
<span>暂无数据</span>
</div> </div>
</el-card> </el-card>
</div> </div>
</template> </template>
...@@ -45,7 +47,7 @@ export default { ...@@ -45,7 +47,7 @@ export default {
methods: { methods: {
init (run = false) { init (run = false) {
if (run || this.item.taskStatus === 1 || this.item.taskStatus === 2) { // 训练完成 if (run || this.item.taskStatus === 1 || this.item.taskStatus === 2) { // 训练完成
ModelEstimate.getLog(this, {taskId: this.item.taskId}).then((res) => { ModelEstimate.getLog(this, { taskId: this.item.taskId }).then((res) => {
this.allLog = res.data this.allLog = res.data
}) })
.catch(function (error) { .catch(function (error) {
...@@ -70,7 +72,7 @@ div /deep/.el-descriptions__table { ...@@ -70,7 +72,7 @@ div /deep/.el-descriptions__table {
div /deep/ .el-card { div /deep/ .el-card {
margin-bottom: 20px; margin-bottom: 20px;
} }
.box-card{ .box-card {
height: calc(100vh - 250px); height: calc(100vh - 250px);
overflow: auto; overflow: auto;
} }
......
...@@ -99,7 +99,7 @@ export default { ...@@ -99,7 +99,7 @@ export default {
}, },
getPreviewCommand () { // 获取参数 getPreviewCommand () { // 获取参数
ModelEstimate.getPreviewCommand(this, { taskId: this.item.taskId }).then((res) => { ModelEstimate.getPreviewCommand(this, { taskId: this.item.taskId }).then((res) => {
this.wsData.data = JSON.parse(res.data) this.wsData.data = res.data
this.send(JSON.stringify(this.wsData)) this.send(JSON.stringify(this.wsData))
}) })
}, },
......
...@@ -50,7 +50,7 @@ export default { ...@@ -50,7 +50,7 @@ export default {
}, },
getPreviewCommand () { // 获取参数 getPreviewCommand () { // 获取参数
ModelEstimate.getPreviewCommand(this, {taskId: this.item.taskId}).then((res) => { ModelEstimate.getPreviewCommand(this, {taskId: this.item.taskId}).then((res) => {
this.wsData.data = JSON.parse(res.data) this.wsData.data = res.data
this.send(JSON.stringify(this.wsData)) this.send(JSON.stringify(this.wsData))
}) })
}, },
......
<!-- --> <!-- -->
<template> <template>
<div class="cardBox"> <div class="cardBox">
<el-card class="box-card" v-for="item in dataList" :key="item.templateId"> <el-card class="box-card" v-for="item in dataList" :key="item.templateId" @click.native="particulars(item)" style="cursor: pointer;">
<div class="titleBox"> <div class="titleBox">
<div> <div>
<div class="title omit">{{item.modelName}}</div> <div class="title omit">{{item.modelName}}</div>
<div class="title-2">大语言模型</div> <div class="title-2">大语言模型</div>
</div> </div>
<div> <div>
<!-- <el-dropdown @command.stop="handleCommand($event,item)">
<el-dropdown @command="handleCommand($event,item)">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<i class="el-icon-more el-icon--right"></i> <i class="el-icon-more el-icon--right"></i>
</span> </span>
...@@ -17,11 +17,9 @@ ...@@ -17,11 +17,9 @@
<el-dropdown-item command="particulars">详情</el-dropdown-item> <el-dropdown-item command="particulars">详情</el-dropdown-item>
<el-dropdown-item command="sft">sft</el-dropdown-item> <el-dropdown-item command="sft">sft</el-dropdown-item>
<el-dropdown-item command="assess">评估</el-dropdown-item> <el-dropdown-item command="assess">评估</el-dropdown-item>
<!-- <el-dropdown-item command="experience">体验</el-dropdown-item> -->
<el-dropdown-item command="deploy">部署</el-dropdown-item> <el-dropdown-item command="deploy">部署</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown> -->
</div> </div>
</div> </div>
<el-divider></el-divider> <el-divider></el-divider>
...@@ -68,8 +66,12 @@ export default { ...@@ -68,8 +66,12 @@ export default {
} else if (command === 'deploy') { } else if (command === 'deploy') {
this.$emit('deploy', item) this.$emit('deploy', item)
} }
},
particulars (item) {
this.$emit('particulars', item)
} }
} }
} }
</script> </script>
......
...@@ -79,7 +79,6 @@ export default { ...@@ -79,7 +79,6 @@ export default {
intFrom () { intFrom () {
this.form.modelVersionDto.modelId = this.tableItem.modelId this.form.modelVersionDto.modelId = this.tableItem.modelId
this.form.modelVersionDto.modelVersion = this.versionIndex + 1 this.form.modelVersionDto.modelVersion = this.versionIndex + 1
console.log(this.form.modelVersionDto);
}, },
onCancel (isSuccess) { onCancel (isSuccess) {
if (this.observer != null) { if (this.observer != null) {
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
<el-button type="text" :size="defaultFormItemSize" @click="assess(scope.row)">评估</el-button> <el-button type="text" :size="defaultFormItemSize" @click="assess(scope.row)">评估</el-button>
<el-button type="text" v-if="scope.row.isCompress==0" :size="defaultFormItemSize" @click="compress(scope.row)">压缩</el-button> <el-button type="text" v-if="scope.row.isCompress==0" :size="defaultFormItemSize" @click="compress(scope.row)">压缩</el-button>
<el-button type="text" :size="defaultFormItemSize" >部署</el-button> <el-button type="text" :size="defaultFormItemSize" >部署</el-button>
<el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">删除</el-button> <!-- <el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">删除</el-button> -->
</template> </template>
</vxe-column> </vxe-column>
</vxe-table> </vxe-table>
......
...@@ -118,7 +118,6 @@ export default { ...@@ -118,7 +118,6 @@ export default {
}); });
}, },
addVersion (row) { addVersion (row) {
console.log(row.modelVersionList);
this.$dialog.show('新增版本', addVersion, { this.$dialog.show('新增版本', addVersion, {
area: ['100%', '100%'] area: ['100%', '100%']
}, { tableItem: row, versionIndex: row.modelVersionList.slice(-1)[0].modelVersion}).then(res => { }, { tableItem: row, versionIndex: row.modelVersionList.slice(-1)[0].modelVersion}).then(res => {
......
...@@ -79,7 +79,6 @@ export default { ...@@ -79,7 +79,6 @@ export default {
intFrom () { intFrom () {
this.form.modelVersionDto.modelId = this.tableItem.modelId this.form.modelVersionDto.modelId = this.tableItem.modelId
this.form.modelVersionDto.modelVersion = this.versionIndex + 1 this.form.modelVersionDto.modelVersion = this.versionIndex + 1
console.log(this.form.modelVersionDto);
}, },
onCancel (isSuccess) { onCancel (isSuccess) {
if (this.observer != null) { if (this.observer != null) {
......
<!-- 代码预览 -->
<template>
<pre :class="'hx-scroll ' + lineNumbers">
<code :class="'language-'+ type" v-html="showCode" ></code>
</pre>
</template>
<script>
import Prism from 'prismjs';
export default {
name: 'prism',
components: {},
props: {
code: {
type: String,
default: ''
},
type: {
type: String,
default: 'js'
},
isShowlineNumbers: {
type: Boolean,
default: true
}
},
data () {
return {};
},
computed: {
lineNumbers () {
return this.isShowlineNumbers ? 'line-numbers' : '';
},
showCode () {
return Prism.highlight(this.code, Prism.languages[this.type], this.type);
}
},
mounted () {
Prism.highlightAll();
},
methods: {}
};
</script>
<style scoped>
</style>
...@@ -8,16 +8,14 @@ ...@@ -8,16 +8,14 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="选择LLM模型:"> <el-form-item label="选择LLM模型:">
<el-select v-model="form.model_name" placeholder="请选择" @change="changeModel"> <el-cascader v-model="form.model_name" ref="modelCascader" :options="modelList"
<el-option v-for="item in []" :key="item.value" :label="item.label" :value="item.value"> :props='{ label: "name", value: "name", emitPath: false }' @change="changeModel"></el-cascader>
</el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="Temperature:"> <el-form-item label="Temperature:">
<el-slider v-model="temperature" :format-tooltip="formatTooltip" @change="form.temperature=temperature / 100"></el-slider> <el-slider v-model="temperature" :format-tooltip="formatTooltip" @change="form.temperature=temperature / 100"></el-slider>
</el-form-item> </el-form-item>
<el-form-item label="历史对话轮数:"> <el-form-item label="历史对话轮数:">
<el-input-number v-model="form.heistoryRotate" :min="0" :max="10" ></el-input-number> <el-input-number v-model="form.heistoryRotate" :min="0" :max="10" ></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label-width="0px" v-if="form.pattern=='知识库问答'"> <el-form-item label-width="0px" v-if="form.pattern=='知识库问答'">
...@@ -25,7 +23,7 @@ ...@@ -25,7 +23,7 @@
<el-collapse-item name="1"> <el-collapse-item name="1">
<template slot="title">知识库配置</template> <template slot="title">知识库配置</template>
<el-form-item label="请选择知识库:" style="margin-bottom:30px"> <el-form-item label="请选择知识库:" style="margin-bottom:30px">
<el-select v-model="form.knowledgeConfige.knowledge_base_name" placeholder="请选择" @change="changeKnowledge"> <el-select ref="knowledgeSelect" v-model="form.knowledgeConfige.knowledge_base_name" placeholder="请选择" @change="changeKnowledge">
<el-option v-for="item in knowledgeList" :key="item.knowledgeId" :label="item.knowledgeName" :value="item.knowledgeName"> <el-option v-for="item in knowledgeList" :key="item.knowledgeId" :label="item.knowledgeName" :value="item.knowledgeName">
</el-option> </el-option>
</el-select> </el-select>
...@@ -46,8 +44,8 @@ ...@@ -46,8 +44,8 @@
<template slot="title">搜索引擎配置</template> <template slot="title">搜索引擎配置</template>
<el-form-item label="选择搜索引擎:" style="margin-bottom:30px"> <el-form-item label="选择搜索引擎:" style="margin-bottom:30px">
<el-select v-model="form.searchConfige.search_engine_name" placeholder="请选择" @change="changeSe"> <el-select ref="searchSelect" v-model="form.searchConfige.search_engine_name" placeholder="请选择" @change="changeSe">
<el-option v-for="item in []" :key="item.value" :label="item.label" :value="item.value"> <el-option v-for="item in [{label:'bing',value:'bing'},{label:'duckduckgo',value:'duckduckgo'}]" :key="item.value" :label="item.label" :value="item.value">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -62,17 +60,20 @@ ...@@ -62,17 +60,20 @@
</template> </template>
<script> <script>
import { KnowledgeManage } from '@/api/gptController.js'; import { KnowledgeManage, MyModel, ModelVersion } from '@/api/gptController.js';
export default { export default {
data () { data () {
return { return {
modelList: [],
activeModelList: [],
loading: undefined,
temperature: 70, temperature: 70,
knowledgeList: [], knowledgeList: [],
knowledgeScoreThreshold: 50, knowledgeScoreThreshold: 50,
form: { form: {
pattern: 'LLM 对话', // 对话模式 pattern: 'LLM 对话', // 对话模式
model_name: 'chatglm3-6b', // 模型名称 model_name: undefined, // 模型名称
temperature: 0.7, temperature: 0.7,
heistoryRotate: 10, // 历史对话轮数 heistoryRotate: 10, // 历史对话轮数
knowledgeConfige: {// 知识库配置 knowledgeConfige: {// 知识库配置
...@@ -81,7 +82,7 @@ export default { ...@@ -81,7 +82,7 @@ export default {
score_threshold: 0.5 score_threshold: 0.5
}, },
searchConfige: {// 搜索引擎配置 searchConfige: {// 搜索引擎配置
search_engine_name: '', search_engine_name: 'bing',
top_k: 1 top_k: 1
} }
} }
...@@ -105,32 +106,86 @@ export default { ...@@ -105,32 +106,86 @@ export default {
}, },
mounted () { mounted () {
this.getKnowledgeList() this.getKnowledgeList()
this.getModelList()
}, },
methods: { methods: {
formatTooltip (val) { getModelList () {
return val / 100; MyModel.listForTree(this, {}).then(res => {
this.modelList = res.data.map((item) => {
return { id: item.modelId, name: item.modelName, children: item.modelVersionList === [] ? [] : item.modelVersionList.map((item2) => { return { id: item2.versionId, name: item2.versionName } }) }
})
this.getActiveModelList()
}).catch(e => {
console.log(e);
});
}, },
getKnowledgeList () { getKnowledgeList () {
let params = {} let params = {}
KnowledgeManage.listForTree(this, params).then(res => { KnowledgeManage.listForTree(this, params).then(res => {
this.knowledgeList = res.data this.knowledgeList = res.data
console.log(res.data);
}).catch(e => { }).catch(e => {
console.log(e); console.log(e);
}); });
}, },
changeModel (dtat) { // 修改模型 getActiveModelList () { // 获取当前挂载上的模型列表
let params = {}
ModelVersion.listModels(this, params).then(res => {
this.activeModelList = res.data
if (this.activeModelList.length === 0) {
this.form.model_name = this.modelList[0].children[0].name
this.switchModel(this.modelList[0].children[0].id)
} else {
this.form.model_name = this.activeModelList[0]
}
}).catch(e => {
console.log(e);
});
}, },
changeKnowledge (dtat) { // 修改知识库 openLoading (text) {
this.loading = this.$loading({
lock: true,
text: text,
customClass: 'myLoading',
spinner: 'el-icon-loading',
background: 'rgba(255, 255, 255, 0.9)'
});
// loading.close();
},
formatTooltip (val) {
return val / 100;
},
switchModel (versionId) { // 切换模型
this.openLoading('LLM模型加载中')
ModelVersion.change(this, {versionId: versionId}).then(res => {
console.log(res);
this.loading.close();
}).catch(e => {
this.loading.close();
console.log(e);
});
},
changeModel (data) { // 修改模型
// this.openLoading('LLM模型加载中')
let id = this.$refs.modelCascader.getCheckedNodes()[0].data.id
this.switchModel(id)
},
changeKnowledge (dtat) { // 修改知识库
// this.openLoading('知识库加载中')
// console.log(this.$refs.knowledgeSelect);
}, },
changeSe (dtat) { // 修改模型引擎 changeSe (dtat) { // 修改模型引擎
// this.openLoading('模型引擎加载中')
// console.log(this.$refs.searchSelect);
} }
} }
} }
</script> </script>
<style scoped> <style >
.myLoading .el-loading-spinner i{
font-size: 24px !important;
}
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment