1313
1414from apps .chat .api .chat import create_chat , question_answer_inner
1515from apps .chat .models .chat_model import ChatMcp , CreateChat , ChatStart , McpQuestion , McpAssistant , ChatQuestion , \
16- ChatFinishStep
16+ ChatFinishStep , McpDs
1717from apps .datasource .crud .datasource import get_datasource_list
18- from apps .system .crud .user import authenticate
18+ from apps .system .crud .user import authenticate , user_ws_options
1919from apps .system .crud .user import get_db_user
2020from apps .system .models .system_model import UserWsModel
2121from apps .system .models .user import UserModel
@@ -81,9 +81,34 @@ def get_user(session: SessionDep, token: str):
8181 return session_user
8282
8383
84- @router .post ("/mcp_ds_list" , operation_id = "mcp_datasource_list" )
85- async def datasource_list (session : SessionDep , token : str ):
84+ @router .post ("/mcp_start" , operation_id = "mcp_start" )
85+ async def mcp_start (session : SessionDep , chat : ChatStart ):
86+ user : BaseUserDTO = authenticate (session = session , account = chat .username , password = chat .password )
87+ if not user :
88+ raise HTTPException (status_code = 400 , detail = "Incorrect account or password" )
89+
90+ if not user .oid or user .oid == 0 :
91+ raise HTTPException (status_code = 400 , detail = "No associated workspace, Please contact the administrator" )
92+ access_token_expires = timedelta (minutes = settings .ACCESS_TOKEN_EXPIRE_MINUTES )
93+ user_dict = user .to_dict ()
94+ t = Token (access_token = create_access_token (
95+ user_dict , expires_delta = access_token_expires
96+ ))
97+ c = create_chat (session , user , CreateChat (origin = 1 ), False )
98+ return {"access_token" : t .access_token , "chat_id" : c .id }
99+
100+
101+ @router .post ("/mcp_ws_list" , operation_id = "mcp_ws_list" )
102+ async def ws_list (session : SessionDep , token : str ):
86103 session_user = get_user (session , token )
104+ return await user_ws_options (session , session_user .id )
105+
106+
107+ @router .post ("/mcp_ds_list" , operation_id = "mcp_datasource_list" )
108+ async def datasource_list (session : SessionDep , mcp_ds : McpDs ):
109+ session_user = get_user (session , mcp_ds .token )
110+ if mcp_ds .oid is not None :
111+ session_user .oid = mcp_ds .oid
87112 ds_list = get_datasource_list (session = session , user = session_user )
88113 result = []
89114 for item in ds_list :
@@ -103,26 +128,11 @@ async def datasource_list(session: SessionDep, token: str):
103128# return session.query(AiModelDetail).all()
104129
105130
106- @router .post ("/mcp_start" , operation_id = "mcp_start" )
107- async def mcp_start (session : SessionDep , chat : ChatStart ):
108- user : BaseUserDTO = authenticate (session = session , account = chat .username , password = chat .password )
109- if not user :
110- raise HTTPException (status_code = 400 , detail = "Incorrect account or password" )
111-
112- if not user .oid or user .oid == 0 :
113- raise HTTPException (status_code = 400 , detail = "No associated workspace, Please contact the administrator" )
114- access_token_expires = timedelta (minutes = settings .ACCESS_TOKEN_EXPIRE_MINUTES )
115- user_dict = user .to_dict ()
116- t = Token (access_token = create_access_token (
117- user_dict , expires_delta = access_token_expires
118- ))
119- c = create_chat (session , user , CreateChat (origin = 1 ), False )
120- return {"access_token" : t .access_token , "chat_id" : c .id }
121-
122-
123131@router .post ("/mcp_question" , operation_id = "mcp_question" )
124132async def mcp_question (session : SessionDep , chat : McpQuestion ):
125133 session_user = get_user (session , chat .token )
134+ if chat .oid is not None :
135+ session_user .oid = chat .oid
126136 ds_id : Optional [int ] = None
127137 if chat .datasource_id :
128138 if isinstance (chat .datasource_id , str ):
0 commit comments