Commit ffe42966 authored by mhw's avatar mhw

版本迭代

parent 1a71920d
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
],
plugins: [
[
'prismjs',
{
languages: ['javascript', 'css', 'markup', 'java', 'python'],
plugins: ['line-numbers'], // 配置显示行号插件
theme: 'twilight', // 主体名称
css: true
}]
]
}
......@@ -3790,6 +3790,12 @@
"@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": {
"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",
......@@ -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": {
"version": "0.11.10",
"resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
......
......@@ -22,4 +22,13 @@ export default class ModelVersion {
static delete (sender, 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 = {
baseUrl: 'http://192.168.0.34:8082/',
baseUrl: 'http://192.168.0.36:8082/',
wsUrl: 'ws://192.168.0.36:7860/',
projectName: '灵境大模型平台'
}
......@@ -6,7 +6,7 @@ import { getToken, setToken, getAppId } from '@/utils';
// 创建axios实例
const service = axios.create({
timeout: 1000 * 30,
timeout: 1000 * 60 * 5,
withCredentials: true,
headers: {
// 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
......
......@@ -244,7 +244,7 @@ const DataAnnotationState = new DictionaryBase('发布状态', [
]);
Vue.prototype.DataAnnotationState = DataAnnotationState;
const ModelTrainingMode = new DictionaryBase('发布状态', [
const ModelTrainingMode = new DictionaryBase('模型训练模式', [
{
id: 0,
name: 'SFT',
......@@ -290,7 +290,7 @@ const VersionStatus = new DictionaryBase('版本状态', [
]);
Vue.prototype.VersionStatus = VersionStatus;
const ModelCreationMode = new DictionaryBase('模型创建式', [
const ModelCreationMode = new DictionaryBase('模型创建式', [
{
id: 0,
name: '创建为已有模型新版本',
......@@ -338,18 +338,17 @@ Vue.prototype.TaskType = TaskType;
// ]);
// Vue.prototype.SftTaskType = SftTaskType;
const TaskStatus = new DictionaryBase('任务状态', [
{
id: 0,
name: '待评估',
symbol: 'ToBeTrained'
},
{
id: -1,
name: '失败',
symbol: 'err'
},
{
id: 0,
name: '待进行',
symbol: 'ToBeTrained'
},
{
id: 1,
name: '已完成',
......@@ -357,8 +356,13 @@ const TaskStatus = new DictionaryBase('任务状态', [
},
{
id: 2,
name: '评估中断',
name: '中断',
symbol: 'stopped'
},
{
id: 3,
name: '进行中',
symbol: 'underway'
}
]);
Vue.prototype.TaskStatus = TaskStatus;
......@@ -414,6 +418,12 @@ const ModeOfSpeaking = new DictionaryBase('对话模式', [
]);
Vue.prototype.ModeOfSpeaking = ModeOfSpeaking;
const RunningStatus = new DictionaryBase('运行状态', [
{
id: -1,
name: '训练失败',
symbol: 'TrainingFailure'
},
{
id: 0,
name: '待训练',
......@@ -430,9 +440,9 @@ const RunningStatus = new DictionaryBase('运行状态', [
symbol: 'TrainingInterruption'
},
{
id: -1,
name: '训练失败',
symbol: 'TrainingFailure'
id: 3,
name: '训练进行中',
symbol: 'TrainingUnderway'
}
]);
Vue.prototype.RunningStatus = RunningStatus;
......
......@@ -4,12 +4,14 @@
<div class="tableBox" >
<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="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">
<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>
</vxe-column>
</vxe-table>
......@@ -86,6 +88,9 @@ export default {
}
});
},
label (row) { // 标注
},
// del (item) {
// this.$confirm('是否确认删除', '提示', {
......
......@@ -39,7 +39,7 @@
<el-button type="text" :size="defaultFormItemSize" @click="del(scope.row)">删除</el-button>
<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="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">
<span class="el-dropdown-link">
更多<i class="el-icon-arrow-down el-icon--right"></i>
......
......@@ -19,8 +19,7 @@
</el-form-item>
<el-form-item label="模型创建⽅式:">
<el-radio v-model="radio" label="0">创建为已有模型新版本</el-radio>
<el-radio v-model="radio" label="1">创建为新模型</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-form-item>
<el-form-item label="选择已有模型:">
<el-select v-model="value" placeholder="请选择">
......
......@@ -52,7 +52,7 @@
<filter-box :item-width="350" @search="refresh()" @reset="onReset">
<el-form-item
label="任务名称"
label="数据集名称"
prop="formFilter.dataName"
label-width="120px"
>
......@@ -60,7 +60,7 @@
class="filter-item"
v-model="myDataSetPage.formFilter.dataName"
:clearable="true"
placeholder="任务名称"
placeholder="数据集名称"
/>
</el-form-item>
</filter-box>
......
......@@ -50,7 +50,7 @@ export default {
},
getPreviewCommand () { // 获取参数
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))
})
},
......
......@@ -92,7 +92,7 @@ export default {
},
getPreviewCommand () { // 获取参数
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))
})
},
......
......@@ -64,7 +64,7 @@ export default {
form: {
'modelCompressDto': {
'createMethod': undefined,
'createMethod': 0,
'sourceVersionId': undefined,
'targetModelId': undefined,
'taskDescribe': undefined,
......
......@@ -9,12 +9,12 @@
</el-card>
<el-card class="box-card">
<el-descriptions title="压缩配置">
<el-descriptions-item label="源模型:">{{}}</el-descriptions-item>
<el-descriptions-item label="压缩后模型:">{{}}</el-descriptions-item>
<el-descriptions-item label="压缩策略:">{{}}</el-descriptions-item>
<el-descriptions-item label="源模型:">{{item.sourceVersionId}}</el-descriptions-item>
<el-descriptions-item label="压缩后模型:">{{item.targetVersionId}}</el-descriptions-item>
<el-descriptions-item label="压缩策略:">INT8</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="box-card">
<!-- <el-card class="box-card">
<el-descriptions title="任务日志">
<el-descriptions-item >
<div class="logBox">
......@@ -23,7 +23,7 @@
</el-descriptions-item>
</el-descriptions>
</el-card>
</el-card> -->
</div>
</template>
......
......@@ -25,7 +25,11 @@
{{ TaskStatus.getValue(scope.row.taskStatus) }}
</template>
</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="createTime" title="创建时间"></vxe-column>
<vxe-column field="operation" title="操作">
......
......@@ -5,7 +5,12 @@
<el-descriptions title="评估指标分析">
<el-descriptions-item>
<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)">
<el-table :data="tableData">
......
<!-- 训练日志 -->
<template>
<div>
<el-card >
<div v-html="logText" class="box-card" ref="logBox">
<el-card>
<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>
</el-card>
</div>
</template>
......@@ -45,7 +47,7 @@ export default {
methods: {
init (run = false) {
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
})
.catch(function (error) {
......@@ -70,7 +72,7 @@ div /deep/.el-descriptions__table {
div /deep/ .el-card {
margin-bottom: 20px;
}
.box-card{
.box-card {
height: calc(100vh - 250px);
overflow: auto;
}
......
......@@ -99,7 +99,7 @@ export default {
},
getPreviewCommand () { // 获取参数
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))
})
},
......
......@@ -50,7 +50,7 @@ export default {
},
getPreviewCommand () { // 获取参数
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))
})
},
......
<!-- -->
<template>
<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>
<div class="title omit">{{item.modelName}}</div>
<div class="title-2">大语言模型</div>
</div>
<div>
<el-dropdown @command="handleCommand($event,item)">
<!-- <el-dropdown @command.stop="handleCommand($event,item)">
<span class="el-dropdown-link">
<i class="el-icon-more el-icon--right"></i>
</span>
......@@ -17,11 +17,9 @@
<el-dropdown-item command="particulars">详情</el-dropdown-item>
<el-dropdown-item command="sft">sft</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-menu>
</el-dropdown>
</el-dropdown> -->
</div>
</div>
<el-divider></el-divider>
......@@ -68,8 +66,12 @@ export default {
} else if (command === 'deploy') {
this.$emit('deploy', item)
}
},
particulars (item) {
this.$emit('particulars', item)
}
}
}
</script>
......
......@@ -79,7 +79,6 @@ export default {
intFrom () {
this.form.modelVersionDto.modelId = this.tableItem.modelId
this.form.modelVersionDto.modelVersion = this.versionIndex + 1
console.log(this.form.modelVersionDto);
},
onCancel (isSuccess) {
if (this.observer != null) {
......
......@@ -26,7 +26,7 @@
<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" :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>
</vxe-column>
</vxe-table>
......
......@@ -118,7 +118,6 @@ export default {
});
},
addVersion (row) {
console.log(row.modelVersionList);
this.$dialog.show('新增版本', addVersion, {
area: ['100%', '100%']
}, { tableItem: row, versionIndex: row.modelVersionList.slice(-1)[0].modelVersion}).then(res => {
......
......@@ -79,7 +79,6 @@ export default {
intFrom () {
this.form.modelVersionDto.modelId = this.tableItem.modelId
this.form.modelVersionDto.modelVersion = this.versionIndex + 1
console.log(this.form.modelVersionDto);
},
onCancel (isSuccess) {
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 @@
</el-select>
</el-form-item>
<el-form-item label="选择LLM模型:">
<el-select v-model="form.model_name" placeholder="请选择" @change="changeModel">
<el-option v-for="item in []" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-cascader v-model="form.model_name" ref="modelCascader" :options="modelList"
:props='{ label: "name", value: "name", emitPath: false }' @change="changeModel"></el-cascader>
</el-form-item>
<el-form-item label="Temperature:">
<el-slider v-model="temperature" :format-tooltip="formatTooltip" @change="form.temperature=temperature / 100"></el-slider>
</el-form-item>
<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 label-width="0px" v-if="form.pattern=='知识库问答'">
......@@ -25,7 +23,7 @@
<el-collapse-item name="1">
<template slot="title">知识库配置</template>
<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>
</el-select>
......@@ -46,8 +44,8 @@
<template slot="title">搜索引擎配置</template>
<el-form-item label="选择搜索引擎:" style="margin-bottom:30px">
<el-select 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-select ref="searchSelect" v-model="form.searchConfige.search_engine_name" placeholder="请选择" @change="changeSe">
<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-select>
</el-form-item>
......@@ -62,17 +60,20 @@
</template>
<script>
import { KnowledgeManage } from '@/api/gptController.js';
import { KnowledgeManage, MyModel, ModelVersion } from '@/api/gptController.js';
export default {
data () {
return {
modelList: [],
activeModelList: [],
loading: undefined,
temperature: 70,
knowledgeList: [],
knowledgeScoreThreshold: 50,
form: {
pattern: 'LLM 对话', // 对话模式
model_name: 'chatglm3-6b', // 模型名称
model_name: undefined, // 模型名称
temperature: 0.7,
heistoryRotate: 10, // 历史对话轮数
knowledgeConfige: {// 知识库配置
......@@ -81,7 +82,7 @@ export default {
score_threshold: 0.5
},
searchConfige: {// 搜索引擎配置
search_engine_name: '',
search_engine_name: 'bing',
top_k: 1
}
}
......@@ -105,32 +106,86 @@ export default {
},
mounted () {
this.getKnowledgeList()
this.getModelList()
},
methods: {
formatTooltip (val) {
return val / 100;
getModelList () {
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 () {
let params = {}
KnowledgeManage.listForTree(this, params).then(res => {
this.knowledgeList = res.data
console.log(res.data);
}).catch(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) { // 修改模型引擎
// this.openLoading('模型引擎加载中')
// console.log(this.$refs.searchSelect);
}
}
}
</script>
<style scoped>
<style >
.myLoading .el-loading-spinner i{
font-size: 24px !important;
}
</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