diff --git a/backend/apps/datasource/api/recommended_problem.py b/backend/apps/datasource/api/recommended_problem.py index b7c75624..a2346b60 100644 --- a/backend/apps/datasource/api/recommended_problem.py +++ b/backend/apps/datasource/api/recommended_problem.py @@ -2,7 +2,7 @@ from apps.datasource.crud.datasource import update_ds_recommended_config from apps.datasource.crud.recommended_problem import get_datasource_recommended, \ - save_recommended_problem + save_recommended_problem, get_datasource_recommended_base from apps.datasource.models.datasource import RecommendedProblemBase from common.core.deps import SessionDep, CurrentUser @@ -13,6 +13,10 @@ async def datasource_recommended(session: SessionDep, ds_id: int): return get_datasource_recommended(session, ds_id) +@router.get("/get_datasource_recommended_base/{ds_id}") +async def datasource_recommended(session: SessionDep, ds_id: int): + return get_datasource_recommended_base(session, ds_id) + @router.post("/save_recommended_problem") async def datasource_recommended(session: SessionDep, user: CurrentUser, data_info: RecommendedProblemBase): diff --git a/backend/apps/datasource/crud/recommended_problem.py b/backend/apps/datasource/crud/recommended_problem.py index 21bbff71..d09a9b95 100644 --- a/backend/apps/datasource/crud/recommended_problem.py +++ b/backend/apps/datasource/crud/recommended_problem.py @@ -3,7 +3,8 @@ from sqlmodel import select from common.core.deps import SessionDep, CurrentUser, Trans -from ..models.datasource import DsRecommendedProblem, RecommendedProblemBase, RecommendedProblemBaseChat +from ..models.datasource import DsRecommendedProblem, RecommendedProblemBase, CoreDatasource, RecommendedProblemResponse +import orjson def get_datasource_recommended(session: SessionDep, ds_id: int): @@ -16,6 +17,18 @@ def get_datasource_recommended_chart(session: SessionDep, ds_id: int): dsRecommendedProblems = session.exec(statement).all() return dsRecommendedProblems + +def get_datasource_recommended_base(session: SessionDep, ds_id: int): + statement = select(CoreDatasource.id,CoreDatasource.recommended_config).where(CoreDatasource.id == ds_id) + datasourceBase = session.exec(statement).first() + if datasourceBase is None: + return RecommendedProblemResponse(ds_id,0,None) + elif datasourceBase.recommended_config == 1: + return RecommendedProblemResponse(ds_id,1,None) + else: + dsRecommendedProblems = session.exec(select(DsRecommendedProblem.question).where(DsRecommendedProblem.datasource_id == ds_id)).all() + return RecommendedProblemResponse(ds_id,datasourceBase.recommended_config, orjson.dumps(dsRecommendedProblems).decode()) + def save_recommended_problem(session: SessionDep,user: CurrentUser, data_info: RecommendedProblemBase): session.query(DsRecommendedProblem).filter(DsRecommendedProblem.datasource_id == data_info.datasource_id).delete(synchronize_session=False) problemInfo = data_info.problemInfo diff --git a/backend/apps/datasource/models/datasource.py b/backend/apps/datasource/models/datasource.py index dd814ea4..ff0c8b6d 100644 --- a/backend/apps/datasource/models/datasource.py +++ b/backend/apps/datasource/models/datasource.py @@ -74,6 +74,16 @@ class CreateDatasource(BaseModel): tables: List[CoreTable] = [] recommended_config: int = 1 +class RecommendedProblemResponse: + def __init__(self, datasource_id,recommended_config,questions): + self.datasource_id = datasource_id + self.recommended_config = recommended_config + self.questions = questions + datasource_id: int = None + recommended_config: int = None + questions: str = None + + class RecommendedProblemBase(BaseModel): datasource_id: int = None recommended_config: int = None diff --git a/frontend/src/api/recommendedApi.ts b/frontend/src/api/recommendedApi.ts index 7c73b62e..a29fe00c 100644 --- a/frontend/src/api/recommendedApi.ts +++ b/frontend/src/api/recommendedApi.ts @@ -5,4 +5,7 @@ export const recommendedApi = { request.get(`/recommended_problem/get_datasource_recommended/${dsId}`), save_recommended_problem: (data: any) => request.post(`/recommended_problem/save_recommended_problem`, data), + get_datasource_recommended_base: (datasource_id?: number): Promise => { + return request.get(`/recommended_problem/get_datasource_recommended_base/${datasource_id}`) + }, } diff --git a/frontend/src/views/chat/QuickQuestion.vue b/frontend/src/views/chat/QuickQuestion.vue index a1e61808..e5e1296d 100644 --- a/frontend/src/views/chat/QuickQuestion.vue +++ b/frontend/src/views/chat/QuickQuestion.vue @@ -104,6 +104,7 @@ const props = withDefaults( :current-chat="currentChat" :record-id="recordId" :questions="questions" + :datasource="datasourceId" :disabled="disabled" :first-chat="firstChat" position="input" diff --git a/frontend/src/views/chat/RecommendQuestionQuick.vue b/frontend/src/views/chat/RecommendQuestionQuick.vue index 789ee44f..a9250f82 100644 --- a/frontend/src/views/chat/RecommendQuestionQuick.vue +++ b/frontend/src/views/chat/RecommendQuestionQuick.vue @@ -2,15 +2,18 @@ import { computed, nextTick, onBeforeUnmount, ref } from 'vue' import { endsWith, startsWith } from 'lodash-es' import { chatApi } from '@/api/chat.ts' +import { recommendedApi } from '@/api/recommendedApi.ts' const props = withDefaults( defineProps<{ recordId?: number disabled?: boolean + datasource?: number }>(), { recordId: undefined, disabled: false, + datasource: undefined, } ) @@ -41,6 +44,16 @@ function clickQuestion(question: string): void { const stopFlag = ref(false) async function getRecommendQuestions(articles_number: number) { + recommendedApi.get_datasource_recommended_base(props.datasource).then((res) => { + if (res.recommended_config === 2) { + questions.value = res.questions + } else { + getRecommendQuestionsLLM(articles_number) + } + }) +} + +async function getRecommendQuestionsLLM(articles_number: number) { stopFlag.value = false loading.value = true try {