Skip to content

Commit 469f535

Browse files
committed
feat: MCP supports configuration to disable rendering charts
1 parent f88cb01 commit 469f535

File tree

4 files changed

+19
-13
lines changed

4 files changed

+19
-13
lines changed

backend/apps/chat/api/chat.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ def inner():
8080

8181
return await asyncio.to_thread(inner)
8282

83+
8384
@router.get("/record/{chat_record_id}/data_live", summary=f"{PLACEHOLDER_PREFIX}get_chart_data_live")
8485
async def chat_record_data_live(session: SessionDep, current_user: CurrentUser, chat_record_id: int):
8586
def inner():
@@ -88,6 +89,7 @@ def inner():
8889

8990
return await asyncio.to_thread(inner)
9091

92+
9193
@router.get("/record/{chat_record_id}/predict_data", summary=f"{PLACEHOLDER_PREFIX}get_chart_predict_data")
9294
async def chat_predict_data(session: SessionDep, current_user: CurrentUser, chat_record_id: int):
9395
def inner():
@@ -275,7 +277,8 @@ async def question_answer(session: SessionDep, current_user: CurrentUser, reques
275277
async def question_answer_inner(session: SessionDep, current_user: CurrentUser, request_question: ChatQuestion,
276278
current_assistant: Optional[CurrentAssistant] = None, in_chat: bool = True,
277279
stream: bool = True,
278-
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART, embedding: bool = False):
280+
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART, embedding: bool = False,
281+
return_img: bool = True):
279282
try:
280283
command, text_before_command, record_id, warning_info = parse_quick_command(request_question.question)
281284
if command:
@@ -331,7 +334,7 @@ async def question_answer_inner(session: SessionDep, current_user: CurrentUser,
331334
request_question.question = text_before_command
332335
request_question.regenerate_record_id = rec_id
333336
return await stream_sql(session, current_user, request_question, current_assistant, in_chat, stream,
334-
finish_step, embedding)
337+
finish_step, embedding, return_img)
335338

336339
elif command == QuickCommand.ANALYSIS:
337340
return await analysis_or_predict(session, current_user, rec_id, 'analysis', current_assistant, in_chat,
@@ -344,7 +347,7 @@ async def question_answer_inner(session: SessionDep, current_user: CurrentUser,
344347
raise Exception(f'Unknown command: {command.value}')
345348
else:
346349
return await stream_sql(session, current_user, request_question, current_assistant, in_chat, stream,
347-
finish_step, embedding)
350+
finish_step, embedding, return_img)
348351
except Exception as e:
349352
traceback.print_exc()
350353

@@ -366,12 +369,13 @@ def _err(_e: Exception):
366369

367370
async def stream_sql(session: SessionDep, current_user: CurrentUser, request_question: ChatQuestion,
368371
current_assistant: Optional[CurrentAssistant] = None, in_chat: bool = True, stream: bool = True,
369-
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART, embedding: bool = False):
372+
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART, embedding: bool = False,
373+
return_img: bool = True):
370374
try:
371375
llm_service = await LLMService.create(session, current_user, request_question, current_assistant,
372376
embedding=embedding)
373377
llm_service.init_record(session=session)
374-
llm_service.run_task_async(in_chat=in_chat, stream=stream, finish_step=finish_step)
378+
llm_service.run_task_async(in_chat=in_chat, stream=stream, finish_step=finish_step, return_img=return_img)
375379
except Exception as e:
376380
traceback.print_exc()
377381

@@ -536,7 +540,8 @@ async def export_excel(session: SessionDep, current_user: CurrentUser, chat_reco
536540

537541
def inner():
538542

539-
data_list = DataFormat.convert_large_numbers_in_object_array(obj_array=_data + _predict_data, int_threshold=1e11)
543+
data_list = DataFormat.convert_large_numbers_in_object_array(obj_array=_data + _predict_data,
544+
int_threshold=1e11)
540545

541546
md_data, _fields_list = DataFormat.convert_object_array_for_pandas(fields, data_list)
542547

backend/apps/chat/models/chat_model.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ class McpQuestion(BaseModel):
338338
datasource_id: Optional[int | str] = Body(description='数据源ID,仅当当前对话没有确定数据源时有效', default=None)
339339
oid: Optional[str] = Body(
340340
description='组织ID,仅当数据源ID为空时有效,如果不传则为最后一次登录SQLBot时所使用的组织ID', default=None)
341+
return_img: Optional[bool] = Body(description='是否返回图表,默认为true开启, 关闭false则仅返回数据', default=True)
341342

342343

343344
class AxisObj(BaseModel):

backend/apps/chat/task/llm.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,18 +1059,18 @@ def await_result(self):
10591059
yield chunk
10601060

10611061
def run_task_async(self, in_chat: bool = True, stream: bool = True,
1062-
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART):
1062+
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART, return_img: bool = True):
10631063
if in_chat:
10641064
stream = True
1065-
self.future = executor.submit(self.run_task_cache, in_chat, stream, finish_step)
1065+
self.future = executor.submit(self.run_task_cache, in_chat, stream, finish_step, return_img)
10661066

10671067
def run_task_cache(self, in_chat: bool = True, stream: bool = True,
1068-
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART):
1069-
for chunk in self.run_task(in_chat, stream, finish_step):
1068+
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART, return_img: bool = True):
1069+
for chunk in self.run_task(in_chat, stream, finish_step, return_img):
10701070
self.chunk_list.append(chunk)
10711071

10721072
def run_task(self, in_chat: bool = True, stream: bool = True,
1073-
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART):
1073+
finish_step: ChatFinishStep = ChatFinishStep.GENERATE_CHART, return_img: bool = True):
10741074
json_result: Dict[str, Any] = {'success': True}
10751075
_session = None
10761076
try:
@@ -1311,7 +1311,7 @@ def run_task(self, in_chat: bool = True, stream: bool = True,
13111311
else:
13121312
# generate picture
13131313
try:
1314-
if chart.get('type') != 'table':
1314+
if chart.get('type') != 'table' and return_img:
13151315
# yield '### generated chart picture\n\n'
13161316
self.current_logs[OperationEnum.GENERATE_PICTURE] = start_log(session=_session,
13171317
operate=OperationEnum.GENERATE_PICTURE,

backend/apps/mcp/mcp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ async def mcp_question(session: SessionDep, chat: McpQuestion):
151151
mcp_chat = ChatMcp(token=chat.token, chat_id=chat.chat_id, question=chat.question, datasource_id=ds_id)
152152

153153
return await question_answer_inner(session=session, current_user=session_user, request_question=mcp_chat,
154-
in_chat=False, stream=chat.stream)
154+
in_chat=False, stream=chat.stream, return_img=chat.return_img)
155155

156156

157157
# Cordys crm

0 commit comments

Comments
 (0)