mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
chore: add model_params_setting to document, knowledge, and paragraph processing
--story=1018694 --user=刘瑞斌 【菲尼克斯】知识库生成问题选择模型,希望可以设置模型参数 https://www.tapd.cn/62980211/s/1768601
This commit is contained in:
parent
5ed5d2786d
commit
121614fb81
|
|
@ -1305,6 +1305,7 @@ class DocumentSerializers(serializers.Serializer):
|
|||
document_id_list = instance.get("document_id_list")
|
||||
model_id = instance.get("model_id")
|
||||
prompt = instance.get("prompt")
|
||||
model_params_setting = instance.get("model_params_setting")
|
||||
state_list = instance.get('state_list')
|
||||
ListenerManagement.update_status(
|
||||
QuerySet(Document).filter(id__in=document_id_list),
|
||||
|
|
@ -1327,7 +1328,7 @@ class DocumentSerializers(serializers.Serializer):
|
|||
QuerySet(Document).filter(id__in=document_id_list))()
|
||||
try:
|
||||
for document_id in document_id_list:
|
||||
generate_related_by_document_id.delay(document_id, model_id, prompt, state_list)
|
||||
generate_related_by_document_id.delay(document_id, model_id, model_params_setting, prompt, state_list)
|
||||
except AlreadyQueued as e:
|
||||
pass
|
||||
|
||||
|
|
|
|||
|
|
@ -267,6 +267,7 @@ class KnowledgeSerializer(serializers.Serializer):
|
|||
knowledge_id = self.data.get('knowledge_id')
|
||||
model_id = instance.get("model_id")
|
||||
prompt = instance.get("prompt")
|
||||
model_params_setting = instance.get("model_params_setting")
|
||||
state_list = instance.get('state_list')
|
||||
ListenerManagement.update_status(
|
||||
QuerySet(Document).filter(knowledge_id=knowledge_id),
|
||||
|
|
@ -285,7 +286,7 @@ class KnowledgeSerializer(serializers.Serializer):
|
|||
)
|
||||
ListenerManagement.get_aggregation_document_status_by_knowledge_id(knowledge_id)()
|
||||
try:
|
||||
generate_related_by_knowledge_id.delay(knowledge_id, model_id, prompt, state_list)
|
||||
generate_related_by_knowledge_id.delay(knowledge_id, model_id, model_params_setting, prompt, state_list)
|
||||
except AlreadyQueued as e:
|
||||
raise AppApiException(500, _('Failed to send the vectorization task, please try again later!'))
|
||||
|
||||
|
|
|
|||
|
|
@ -480,6 +480,7 @@ class ParagraphSerializers(serializers.Serializer):
|
|||
paragraph_id_list = instance.get("paragraph_id_list")
|
||||
model_id = instance.get("model_id")
|
||||
prompt = instance.get("prompt")
|
||||
model_params_setting = instance.get("model_params_setting")
|
||||
document_id = self.data.get('document_id')
|
||||
ListenerManagement.update_status(
|
||||
QuerySet(Document).filter(id=document_id),
|
||||
|
|
@ -493,7 +494,7 @@ class ParagraphSerializers(serializers.Serializer):
|
|||
)
|
||||
ListenerManagement.get_aggregation_document_status(document_id)()
|
||||
try:
|
||||
generate_related_by_paragraph_id_list.delay(document_id, paragraph_id_list, model_id, prompt)
|
||||
generate_related_by_paragraph_id_list.delay(document_id, paragraph_id_list, model_id, model_params_setting, prompt)
|
||||
except AlreadyQueued as e:
|
||||
raise AppApiException(500, _('The task is being executed, please do not send it again.'))
|
||||
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@ from models_provider.tools import get_model
|
|||
from ops import celery_app
|
||||
|
||||
|
||||
def get_llm_model(model_id):
|
||||
def get_llm_model(model_id, model_params_setting=None):
|
||||
model = QuerySet(Model).filter(id=model_id).first()
|
||||
return ModelManage.get_model(model_id, lambda _id: get_model(model))
|
||||
return ModelManage.get_model(model_id, lambda _id: get_model(model, **(model_params_setting or {})))
|
||||
|
||||
|
||||
def generate_problem_by_paragraph(paragraph, llm_model, prompt):
|
||||
|
|
@ -64,18 +64,18 @@ def get_is_the_task_interrupted(document_id):
|
|||
|
||||
@celery_app.task(base=QueueOnce, once={'keys': ['knowledge_id']},
|
||||
name='celery:generate_related_by_knowledge')
|
||||
def generate_related_by_knowledge_id(knowledge_id, model_id, prompt, state_list=None):
|
||||
def generate_related_by_knowledge_id(knowledge_id, model_id, model_params_setting, prompt, state_list=None):
|
||||
document_list = QuerySet(Document).filter(knowledge_id=knowledge_id)
|
||||
for document in document_list:
|
||||
try:
|
||||
generate_related_by_document_id.delay(document.id, model_id, prompt, state_list)
|
||||
generate_related_by_document_id.delay(document.id, model_id, model_params_setting, prompt, state_list)
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
|
||||
@celery_app.task(base=QueueOnce, once={'keys': ['document_id']},
|
||||
name='celery:generate_related_by_document')
|
||||
def generate_related_by_document_id(document_id, model_id, prompt, state_list=None):
|
||||
def generate_related_by_document_id(document_id, model_id, model_params_setting, prompt, state_list=None):
|
||||
if state_list is None:
|
||||
state_list = [State.PENDING.value, State.STARTED.value, State.SUCCESS.value, State.FAILURE.value,
|
||||
State.REVOKE.value,
|
||||
|
|
@ -87,7 +87,7 @@ def generate_related_by_document_id(document_id, model_id, prompt, state_list=No
|
|||
ListenerManagement.update_status(QuerySet(Document).filter(id=document_id),
|
||||
TaskType.GENERATE_PROBLEM,
|
||||
State.STARTED)
|
||||
llm_model = get_llm_model(model_id)
|
||||
llm_model = get_llm_model(model_id, model_params_setting)
|
||||
|
||||
# 生成问题函数
|
||||
generate_problem = get_generate_problem(llm_model, prompt,
|
||||
|
|
@ -110,7 +110,7 @@ def generate_related_by_document_id(document_id, model_id, prompt, state_list=No
|
|||
|
||||
@celery_app.task(base=QueueOnce, once={'keys': ['paragraph_id_list']},
|
||||
name='celery:generate_related_by_paragraph_list')
|
||||
def generate_related_by_paragraph_id_list(document_id, paragraph_id_list, model_id, prompt):
|
||||
def generate_related_by_paragraph_id_list(document_id, paragraph_id_list, model_id, model_params_setting, prompt):
|
||||
try:
|
||||
is_the_task_interrupted = get_is_the_task_interrupted(document_id)
|
||||
if is_the_task_interrupted():
|
||||
|
|
@ -121,7 +121,7 @@ def generate_related_by_paragraph_id_list(document_id, paragraph_id_list, model_
|
|||
ListenerManagement.update_status(QuerySet(Document).filter(id=document_id),
|
||||
TaskType.GENERATE_PROBLEM,
|
||||
State.STARTED)
|
||||
llm_model = get_llm_model(model_id)
|
||||
llm_model = get_llm_model(model_id, model_params_setting)
|
||||
# 生成问题函数
|
||||
generate_problem = get_generate_problem(llm_model, prompt, ListenerManagement.get_aggregation_document_status(
|
||||
document_id))
|
||||
|
|
|
|||
|
|
@ -28,7 +28,21 @@
|
|||
<p>{{ $t('views.document.generateQuestion.tip4') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<el-form-item :label="$t('views.application.form.aiModel.label')" prop="model_id">
|
||||
<el-form-item prop="model_id">
|
||||
<template #label>
|
||||
<div class="flex-between">
|
||||
<span>{{ $t('views.application.form.aiModel.label') }}</span>
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="openAIParamSettingDialog"
|
||||
:disabled="!form.model_id"
|
||||
>
|
||||
<AppIcon iconName="app-setting" class="mr-4"></AppIcon>
|
||||
{{ $t('common.paramSetting') }}
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<ModelSelect
|
||||
v-model="form.model_id"
|
||||
:placeholder="$t('views.application.form.aiModel.placeholder')"
|
||||
|
|
@ -68,6 +82,8 @@
|
|||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<AIModeParamSettingDialog ref="AIModeParamSettingDialogRef" @refresh="refreshForm" />
|
||||
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref, watch, computed } from 'vue'
|
||||
|
|
@ -78,6 +94,7 @@ import { MsgSuccess } from '@/utils/message'
|
|||
import { t } from '@/locales'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
|
||||
import AIModeParamSettingDialog from "@/views/application/component/AIModeParamSettingDialog.vue";
|
||||
|
||||
const props = defineProps<{
|
||||
apiType: 'systemShare' | 'workspace' | 'systemManage' | 'workspaceShare'
|
||||
|
|
@ -130,6 +147,21 @@ watch(dialogVisible, (bool) => {
|
|||
FormRef.value?.clearValidate()
|
||||
}
|
||||
})
|
||||
const AIModeParamSettingDialogRef = ref()
|
||||
const openAIParamSettingDialog = () => {
|
||||
if (form.value.model_id) {
|
||||
AIModeParamSettingDialogRef.value?.open(
|
||||
form.value.model_id,
|
||||
id,
|
||||
form.value.model_params_setting,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
function refreshForm(data: any) {
|
||||
form.value.model_params_setting = data
|
||||
}
|
||||
|
||||
|
||||
const open = (ids: string[], type: string, _knowledge?: any) => {
|
||||
currentKnowledge.value = _knowledge
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { defineStore } from 'pinia'
|
|||
import { t } from '@/locales'
|
||||
export interface promptTypes {
|
||||
user: string
|
||||
formValue: { model_id: string; prompt: string }
|
||||
formValue: { model_id: string; prompt: string; model_params_setting: any }
|
||||
}
|
||||
|
||||
const usePromptStore = defineStore('prompt', {
|
||||
|
|
@ -25,6 +25,7 @@ const usePromptStore = defineStore('prompt', {
|
|||
}
|
||||
return {
|
||||
model_id: '',
|
||||
model_params_setting: {},
|
||||
prompt:
|
||||
t('views.document.generateQuestion.prompt1', { data: '{data}' }) +
|
||||
'<question></question>' +
|
||||
|
|
|
|||
Loading…
Reference in New Issue