Commit b25249e2 authored by pengxin's avatar pengxin

Merge branch 'master' of http://192.168.0.35:3000/lmp/lmp_web

parents f36fbbde 19a96dcb
......@@ -15,4 +15,10 @@ export default class KnowledgeGraph {
static delete (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/kGManage/delete', 'post', params, axiosOption, httpOption);
}
static connectionTest (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/kGManage/connectionTest', 'post', params, axiosOption, httpOption);
}
static listForSelect (sender, params, axiosOption, httpOption) {
return sender.doUrl('/admin/app/kGManage/listForSelect', 'post', params, axiosOption, httpOption);
}
}
module.exports = {
// baseUrl: 'http://218.76.0.69:8082/',
baseUrl: 'http://192.168.0.36:8082/',
// baseUrl: 'http://192.168.0.168:8482/',
// baseUrl: 'http://192.168.0.34:8082/',
// baseUrl: 'http://192.168.0.36:8082/',
baseUrl: 'http://192.168.0.168:8082/',
wsUrl: 'ws://218.76.0.69:7860/',
projectName: '灵境大模型平台'
}
......@@ -518,7 +518,7 @@ const RunningStatus = new DictionaryBase('运行状态', [
symbol: 'TrainingUnderway'
}
]);
Vue.prototype.RunningStatus = RunningStatus;
const DeploymentStatus = new DictionaryBase('部署状态', [
{
......
......@@ -266,7 +266,12 @@ export default {
}
},
getDataList() {
MyDataSet.listForTree(this, {})
MyDataSet.listForTree(this, {
datasetVersionDto: {
inputStatus: 1,
releaseStatus: 0
}
})
.then((res) => {
this.dataList = res.data.map((item) => {
return {
......
......@@ -71,7 +71,7 @@
</vxe-column>
<vxe-column field="releaseStatus" title="发布状态">
<template slot-scope="scope">
<el-tag :type="scope.row.releaseStatus!==0?'danger':'info'" size="mini">{{ PublishStatus.getValue(scope.row.releaseStatus ) }}</el-tag>
<el-tag :type="scope.row.releaseStatus!==0?'success':'info'" size="mini">{{ PublishStatus.getValue(scope.row.releaseStatus ) }}</el-tag>
</template>
</vxe-column>
<vxe-column field="createTime" title="创建时间"></vxe-column>
......@@ -274,7 +274,7 @@ export default {
add() {
this.$dialog
.show(
'创建模版',
'创建数据集',
editOrAdd,
{
area: ['100%', '100%']
......@@ -289,7 +289,7 @@ export default {
edit(item) {
this.$dialog
.show(
'修改模版',
'修改数据集',
editOrAdd,
{
area: ['100%', '100%']
......
......@@ -51,7 +51,8 @@
</div>
<div class="dataItem">
<div class="title">发布状态:</div>
<div class="content"> {{ ReleaseStatus.getValue(nowVersion.releaseStatus) }}</div>
<div class="content">
{{ ReleaseStatus.getValue(nowVersion.releaseStatus) }}</div>
</div>
<div class="dataItem">
<div class="title">标注类型>模板:</div>
......
......@@ -45,8 +45,9 @@
</el-tooltip>
</div> -->
<div style="margin-bottom:10px">
<el-button :size="defaultFormItemSize" :plain="true" @click.stop="edit(item)">编辑</el-button>
<el-button :size="defaultFormItemSize" :plain="true" @click.stop="del(item)">删除</el-button>
<el-button type="primary" plain :size="defaultFormItemSize" @click.stop="testLink(item)">测试连接</el-button>
<el-button type="primary" :size="defaultFormItemSize" :plain="true" @click.stop="edit(item)">编辑</el-button>
<el-button type="danger" :size="defaultFormItemSize" :plain="true" @click.stop="del(item)">删除</el-button>
</div>
</div>
</el-card>
......@@ -101,7 +102,7 @@ export default {
'修改知识图谱',
editOrAdd,
{
area: ['100%', '100%']
area: ['50%', '70%']
},
{ isEdit: true, item: item }
)
......@@ -129,6 +130,16 @@ export default {
},
openurl(url) {
window.open(url, '_blank')
},
testLink(item) {
let params = { kgId: item.kgId }
KnowledgeGraph.connectionTest(this, params)
.then((res) => {
this.$message.success('连接成功')
})
.catch((e) => {
console.log(e)
})
}
}
}
......
......@@ -87,7 +87,7 @@ export default {
'创建知识图谱',
editOrAdd,
{
area: ['100%', '100%']
area: ['50%', '70%']
},
{ isEdit: false }
)
......
......@@ -35,8 +35,8 @@
<span class="introduce">
训练任务的选择数据及相关配置,支持选择该模型可使用的数据。</span></el-row>
<el-form-item label="选择数据集版本" prop="tuningRunDto.datasetVersionId">
<el-cascader v-model="form.tuningRunDto.datasetVersionId" :options="dataList" :props="{ label: 'name', value: 'id', emitPath: false }"></el-cascader>
<el-form-item label="选择数据集版本" prop="tuningRunDto.datasetVersionIds">
<el-cascader v-model="form.tuningRunDto.datasetVersionIds" :options="dataList" :props="{ label: 'name', value: 'id', emitPath: false , multiple:true}"></el-cascader>
</el-form-item>
<el-form-item label="数据拆分比例:">
<el-input-number v-model="form.tuningRunDto.splitRatio" class="inputWidth" :size="defaultFormItemSize" :min="0" :max="100"></el-input-number>
......@@ -70,7 +70,7 @@ export default {
taskId: undefined,
trainMethod: 'full',
trainMode: '',
datasetVersionId: undefined,
datasetVersionIds: undefined,
modelVersionId: undefined
},
tuningTaskDto: {
......@@ -83,7 +83,7 @@ export default {
'tuningTaskDto.taskName': [{ required: true, message: '请输入任务名称', trigger: 'blur' }],
'tuningRunDto.modelVersionId': [{ required: true, message: '请选择基础模型版', trigger: 'blur' }],
'tuningRunDto.datasetVersionId': [{ required: true, message: '请选择数据集版本', trigger: 'blur' }]
'tuningRunDto.datasetVersionIds': [{ required: true, message: '请选择数据集版本', trigger: 'blur' }]
}
}
},
......@@ -125,6 +125,7 @@ export default {
if (valid) {
let params = {}
params = this.existingTask ? { tuningRunDto: this.form.tuningRunDto } : { ...this.form }
params.tuningRunDto.datasetVersionIds = params.tuningRunDto.datasetVersionIds.join()
if (this.isEdit) {
apiFunction
.update(this, params)
......@@ -175,7 +176,12 @@ export default {
})
},
getDataList() {
MyDataSet.listForTree(this, {})
MyDataSet.listForTree(this, {
datasetVersionDto: {
inputStatus: 1,
releaseStatus: 1
}
})
.then((res) => {
this.dataList = res.data.map((item) => {
return {
......
......@@ -17,8 +17,8 @@
<el-form-item label="待评估模型:" prop="modelEstimateDto.modelVersionId">
<el-cascader v-model="form.modelEstimateDto.modelVersionId" :options="modelList" :props='{ label: "name", value: "id", emitPath: false }'></el-cascader>
</el-form-item>
<el-form-item label="评估数据集:" prop="modelEstimateDto.datasetVersionId">
<el-cascader v-model="form.modelEstimateDto.datasetVersionId" :options="dataList" :props='{ label: "name", value: "id", emitPath: false }'></el-cascader>
<el-form-item label="评估数据集:" prop="modelEstimateDto.datasetVersionIds">
<el-cascader v-model="form.modelEstimateDto.datasetVersionIds" :options="dataList" :props='{ label: "name", value: "id", emitPath: false , multiple:true}'></el-cascader>
<el-row> <span class="introduce">支持选择平台数据服务模块已发布的“文本对话”类型数据集。</span></el-row>
</el-form-item>
<el-row type="flex" justify="end" class="dialog-btn-layer mt20">
......@@ -43,14 +43,14 @@ export default {
taskName: undefined,
taskDescribe: undefined,
modelVersionId: undefined,
datasetVersionId: undefined,
datasetVersionIds: undefined,
configuration: undefined
}
},
rules: {
'modelEstimateDto.taskName': [{ required: true, message: '请输入任务名称', trigger: 'blur' }],
'modelEstimateDto.modelVersionId': [{ required: true, message: '请选择待评估模型', trigger: 'blur' }],
'modelEstimateDto.datasetVersionId': [{ required: true, message: '请选择评估数据集', trigger: 'blur' }]
'modelEstimateDto.datasetVersionIds': [{ required: true, message: '请选择评估数据集', trigger: 'blur' }]
}
}
},
......@@ -81,7 +81,7 @@ export default {
if (valid) {
let params = {}
params = { ...this.form }
params.modelEstimateDto.datasetVersionIds = params.modelEstimateDto.datasetVersionIds.join()
if (this.isEdit) {
ModelEstimate.update(this, params)
.then((res) => {
......@@ -122,7 +122,12 @@ export default {
})
},
getDataList() {
MyDataSet.listForTree(this, {})
MyDataSet.listForTree(this, {
datasetVersionDto: {
inputStatus: 1,
releaseStatus: 1
}
})
.then((res) => {
this.dataList = res.data.map((item) => {
// prettier-ignore
......
......@@ -3,7 +3,7 @@
<el-form label-position="left" ref="form" label-width="120px" :model="form" :size="defaultFormItemSize" style="padding:20px;width:400px" v-loading.fullscreen.lock="fullscreenLoading">
<el-form-item label="问答模式:">
<el-select v-model="form.pattern" placeholder="请选择" @change="patternChange">
<el-option v-for="item in ModeOfSpeaking.getList()" :key="item.id" :label="item.name" :value="item.name">
<el-option v-for="item in ModeOfSpeaking.getList()" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
......@@ -37,7 +37,7 @@
{{ form.prompt_template }}
</div>
</el-form-item>
<el-form-item label-width="0px" v-if="form.pattern == '专业知识库问答'">
<el-form-item label-width="0px" v-if="form.pattern == 1">
<el-collapse value="1">
<el-collapse-item name="1">
<template slot="title">知识库配置</template>
......@@ -47,7 +47,7 @@
</el-option>
</el-select>
<div class="el-upload__tip">{{knowledgeDescribe}}</div>
<div class="el-upload__tip" style="background-color: #f3f3f3;padding: 10px;border-radius: 10px;white-space: pre-wrap; display: inline-flex;">{{knowledgeDescribe}}</div>
</el-form-item>
<el-form-item label="匹配知识条数:" style="margin-bottom:30px">
......@@ -59,7 +59,7 @@
</el-collapse-item>
</el-collapse>
</el-form-item>
<el-form-item label-width="0px" v-if="form.pattern == '搜索引擎问答'">
<el-form-item label-width="0px" v-if="form.pattern == 2">
<el-collapse value="1">
<el-collapse-item name="1">
<template slot="title">搜索引擎配置</template>
......@@ -75,7 +75,7 @@
</el-collapse-item>
</el-collapse>
</el-form-item>
<el-form-item label-width="0px" v-if="form.pattern == '基于文件问答'">
<el-form-item label-width="0px" v-if="form.pattern == 3">
<el-collapse value="1">
<el-collapse-item name="1">
<template slot="title">文件配置</template>
......@@ -98,31 +98,30 @@
</el-collapse-item>
</el-collapse>
</el-form-item>
<!-- <el-form-item label-width="0px" v-if="form.pattern == '知识图谱问答'">
<el-form-item label-width="0px" v-if="form.pattern == 4">
<el-collapse value="1">
<el-collapse-item name="1">
<template slot="title">知识图谱配置</template>
<el-form-item label="请选择知识图谱:" style="margin-bottom:30px">
<el-select ref="knowledgeSelect" v-model="form.knowledgeGraphConfige. knowledge_graph_name" placeholder="请选择">
<el-option v-for="item in []" :key="item.knowledgeId" :label="item.knowledgeGraphName" :value="item.knowledgeGraphName">
<el-select ref="knowledgeGraphSelect" v-model="form.knowledgeGraphConfige.knowledge_graph_name" placeholder="请选择" @change="knowledgeGraphSelect">
<el-option v-for="item in knowledgeGraphList" :key="item.kgId" :label="item.kgName" :value="item.kgName">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="匹配知识条数:" style="margin-bottom:30px">
<!-- <el-form-item label="匹配知识条数:" style="margin-bottom:30px">
<el-input-number v-model="form.knowledgeGraphConfige.top_k" :min="1" :max="20"></el-input-number>
</el-form-item>
<el-form-item label="匹配精度:">
<el-slider v-model="knowledgeScoreThreshold" :format-tooltip="formatTooltip" @change="form.knowledgeGraphConfige.score_threshold = knowledgeGraphThreshold / 100"></el-slider>
</el-form-item>
</el-form-item> -->
</el-collapse-item>
</el-collapse>
</el-form-item> -->
</el-form-item>
</el-form>
</template>
<script>
import { KnowledgeManage, MyModel, ModelVersion, TemplateController, ModelDeployment } from '@/api/gptController.js'
import { KnowledgeManage, MyModel, ModelVersion, TemplateController, ModelDeployment, KnowledgeGraph } from '@/api/gptController.js'
import promptWordTemplate from '../promptWordTemplate'
export default {
data() {
......@@ -142,8 +141,9 @@ export default {
knowledgeScoreThreshold: 50,
fileThreshold: 50,
knowledgeGraphThreshold: 50,
knowledgeGraphList: [],
form: {
pattern: '通用智能问答', // 对话模式
pattern: 0, // 对话模式
model_name: undefined, // 模型名称
temperature: 0.7,
prompt_template: '',
......@@ -171,7 +171,10 @@ export default {
// 知识图谱对话
knowledge_graph_name: '',
top_k: 1,
score_threshold: 0.5
score_threshold: 0.5,
url: '',
username: '',
password: ''
}
},
filesForm: {
......@@ -200,6 +203,7 @@ export default {
// this.getModelList()
this.getTemplateControllerList()
this.getServeList()
this.getKnowledgeGraphList()
},
methods: {
......@@ -219,6 +223,16 @@ export default {
console.log(e)
})
},
getKnowledgeGraphList() {
KnowledgeGraph.listForSelect(this, {})
.then((res) => {
console.log(res)
this.knowledgeGraphList = res.data
})
.catch((e) => {
console.log(e)
})
},
getServeList() {
ModelDeployment.canUseList(this, {})
.then((res) => {
......@@ -321,6 +335,17 @@ export default {
// this.openLoading('模型引擎加载中')
// console.log(this.$refs.searchSelect);
},
knowledgeGraphSelect(data) {
// 修改知识图谱
this.form.knowledgeGraphConfige.url = this.filterItem(this.knowledgeGraphList, 'kgName', data).kgUrl
this.form.knowledgeGraphConfige.username = this.filterItem(this.knowledgeGraphList, 'kgName', data).kgUserName
this.form.knowledgeGraphConfige.password = this.filterItem(this.knowledgeGraphList, 'kgName', data).kgPassword
},
filterItem(arr, key, data) {
return arr.filter((item) => {
return item[key] === data
})[0]
},
templateControllerChange(data) {
if (!data) {
this.form.prompt_template = ''
......
......@@ -87,24 +87,28 @@ export default {
this.heistoryRotate = this.chatForm.heistoryRotate
this.param.prompt_template = this.isPromptTemplate ? this.chatForm.prompt_template : undefined
let apiUrl
if (this.chatForm.pattern === '通用智能问答') {
if (this.chatForm.pattern === 0) {
apiUrl = '/2api/chat/chat'
} else if (this.chatForm.pattern === '专业知识库问答') {
} else if (this.chatForm.pattern === 1) {
apiUrl = '/2api/chat/knowledge_base_chat'
this.param = { ...this.param, ...this.chatForm.knowledgeConfige }
} else if (this.chatForm.pattern === '搜索引擎问答') {
} else if (this.chatForm.pattern === 2) {
apiUrl = '/2api/chat/search_engine_chat'
this.param = { ...this.param, ...this.chatForm.searchConfige }
} else if (this.chatForm.pattern === '基于文件问答') {
} else if (this.chatForm.pattern === 3) {
apiUrl = '/2api/chat/file_chat'
this.param = { ...this.param, ...this.chatForm.fileConfige }
if (!this.chatForm.fileConfige.knowledge_id) {
this.$message.error('请先上传文件')
return
}
} else if (this.chatForm.pattern === '知识图谱问答') {
} else if (this.chatForm.pattern === 4) {
apiUrl = '/2api/chat/mapping_knowledge'
this.param = { ...this.param, ...this.chatForm.knowledgeGraphConfige }
if (!this.chatForm.knowledgeGraphConfige.knowledge_graph_name) {
this.$message.error('请先请选择知识图谱')
return
}
}
if (!this.inputContent) return
this.param.query = this.inputContent
......@@ -142,12 +146,15 @@ export default {
},
onmessage(data) {
console.log(data)
let nowChat = this.myHistory[this.myHistory.length - 1]
if (this.chatForm.pattern === '通用智能问答') {
if (this.chatForm.pattern === 0) {
// 通用智能问答
// data = data.replace(/^data:\s+|\s+$/g, '')
nowChat.excludeReferenceAnswer += data
nowChat.answer += data
} else if (this.chatForm.pattern === '专业知识库问答') {
} else if (this.chatForm.pattern === 1) {
// 专业知识库问答
// console.log(data)
let temporary = JSON.parse(`[${data}]`.replace(/}{/g, '},{'))
temporary.forEach((item) => {
......@@ -155,8 +162,10 @@ export default {
nowChat.excludeReferenceAnswer += item.answer || '' // 排除回答中的引用内容
nowChat.answer += item.answer || '\n' + item.docs
})
} else if (this.chatForm.pattern === '搜索引擎问答') {
} else if (this.chatForm.pattern === '基于文件问答') {
} else if (this.chatForm.pattern === 2) {
// 搜索引擎问答
} else if (this.chatForm.pattern === 3) {
// 基于文件问答
let temporary = JSON.parse(`[${data}]`.replace(/}{/g, '},{'))
temporary.forEach((item) => {
......@@ -164,7 +173,7 @@ export default {
nowChat.excludeReferenceAnswer += item.answer || '' // 排除回答中的引用内容
nowChat.answer += item.answer || '\n' + item.docs
})
} else if (this.chatForm.pattern === '知识图谱问答') {
} else if (this.chatForm.pattern === 4) {
let temporary = JSON.parse(`[${data}]`.replace(/}{/g, '},{'))
temporary.forEach((item) => {
......
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