MCPcopy Index your code
hub / github.com/1Panel-dev/MaxKB / mcp_response_generator

Function mcp_response_generator

apps/application/flow/tools.py:752–813  ·  view source on GitHub ↗

使用全局事件循环,不创建新实例

(
    chat_model,
    system_prompt,
    message_list,
    mcp_servers,
    mcp_output_enable=True,
    tool_init_params={},
    source_id=None,
    source_type=None,
    chat_id=None,
    extra_tools=None,
)

Source from the content-addressed store, hash-verified

750
751
752def mcp_response_generator(
753 chat_model,
754 system_prompt,
755 message_list,
756 mcp_servers,
757 mcp_output_enable=True,
758 tool_init_params={},
759 source_id=None,
760 source_type=None,
761 chat_id=None,
762 extra_tools=None,
763):
764 """使用全局事件循环,不创建新实例"""
765 result_queue = queue.Queue()
766 loop = get_global_loop() # 使用共享循环
767 # 创建临时文件夹
768 if chat_id:
769 temp_dir = os.path.join("/tmp", chat_id)
770 else:
771 temp_dir = os.path.join("/tmp", str(uuid.uuid7()))
772 skills_dir = os.path.join(temp_dir, "skills")
773 os.makedirs(skills_dir, exist_ok=True)
774
775 # print(f"Initializing skills in temporary directory: {skills_dir}")
776
777 async def _run():
778 try:
779 async_gen = _yield_mcp_response(
780 chat_model,
781 system_prompt,
782 message_list,
783 mcp_servers,
784 mcp_output_enable,
785 tool_init_params,
786 source_id,
787 source_type,
788 temp_dir,
789 chat_id,
790 extra_tools,
791 )
792 async for chunk in async_gen:
793 result_queue.put(("data", chunk))
794 except Exception as e:
795 maxkb_logger.error(f"Exception: {e}", exc_info=True)
796 result_queue.put(("error", e))
797 finally:
798 result_queue.put(("done", None))
799
800 # 在全局循环中调度任务
801 asyncio.run_coroutine_threadsafe(_run(), loop)
802
803 while True:
804 msg_type, data = result_queue.get()
805 if msg_type == "done":
806 # 清理临时文件夹
807 shutil.rmtree(temp_dir, ignore_errors=True)
808 break
809 if msg_type == "error":

Callers 2

_handle_mcp_requestMethod · 0.90
_handle_mcp_requestMethod · 0.90

Calls 3

get_global_loopFunction · 0.85
_runFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected