Skip to content

Commit 98d685f

Browse files
committed
feat: MCP support get third-part system datasource
1 parent 12e64b3 commit 98d685f

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

backend/apps/chat/task/llm.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,8 @@ def select_datasource(self):
426426
full_text = ''
427427
if not ignore_auto_select:
428428
if settings.EMBEDDING_ENABLED:
429-
ds = get_ds_embedding(self.session, self.current_user, _ds_list, self.chat_question.question)
429+
ds = get_ds_embedding(self.session, self.current_user, _ds_list, self.out_ds_instance,
430+
self.chat_question.question, self.current_assistant)
430431
yield {'content': '{"id":' + str(ds.get('id')) + '}'}
431432
else:
432433
_ds_list_dict = []

backend/apps/datasource/embedding/ds_embedding.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import json
44
import math
55
import traceback
6+
from typing import Optional
67

78
from apps.ai_model.embedding import EmbeddingModelCache
89
from apps.datasource.crud.datasource import get_table_schema
910
from apps.datasource.models.datasource import CoreDatasource
11+
from apps.system.crud.assistant import AssistantOutDs
12+
from common.core.deps import CurrentAssistant
1013
from common.core.deps import SessionDep, CurrentUser
1114
from common.utils.utils import SQLBotLogUtil
1215

@@ -26,17 +29,26 @@ def cosine_similarity(vec_a, vec_b):
2629
return dot_product / (norm_a * norm_b)
2730

2831

29-
def get_ds_embedding(session: SessionDep, current_user: CurrentUser, _ds_list, question: str):
32+
def get_ds_embedding(session: SessionDep, current_user: CurrentUser, _ds_list, out_ds: AssistantOutDs,
33+
question: str,
34+
current_assistant: Optional[CurrentAssistant] = None):
3035
_list = []
31-
for _ds in _ds_list:
32-
if _ds.get('id'):
33-
ds = session.get(CoreDatasource, _ds.get('id'))
34-
35-
table_schema = get_table_schema(session, current_user, ds)
36-
ds_info = f"{ds.name}, {ds.description}\n"
37-
ds_schema = ds_info + table_schema
38-
39-
_list.append({"id": ds.id, "ds_schema": ds_schema, "cosine_similarity": 0.0, "ds": ds})
36+
if current_assistant and current_assistant.type != 4:
37+
if out_ds.ds_list:
38+
for _ds in out_ds.ds_list:
39+
ds = out_ds.get_ds(_ds.id)
40+
table_schema = out_ds.get_db_schema(_ds.id)
41+
ds_info = f"{ds.name}, {ds.description}\n"
42+
ds_schema = ds_info + table_schema
43+
_list.append({"id": ds.id, "ds_schema": ds_schema, "cosine_similarity": 0.0, "ds": ds})
44+
else:
45+
for _ds in _ds_list:
46+
if _ds.get('id'):
47+
ds = session.get(CoreDatasource, _ds.get('id'))
48+
table_schema = get_table_schema(session, current_user, ds)
49+
ds_info = f"{ds.name}, {ds.description}\n"
50+
ds_schema = ds_info + table_schema
51+
_list.append({"id": ds.id, "ds_schema": ds_schema, "cosine_similarity": 0.0, "ds": ds})
4052

4153
if _list:
4254
try:

0 commit comments

Comments
 (0)