diff --git a/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/chat.py b/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/chat.py
index f95c57bd4..0f23cce96 100644
--- a/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/chat.py
+++ b/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/chat.py
@@ -70,11 +70,12 @@ class ChatDashboard(BaseChat):
print("dashboard vector find tables:{}", table_infos)
except Exception as e:
print("db summary find error!" + str(e))
+ table_infos = self.database.table_simple_info()
input_values = {
"input": self.current_user_input,
"dialect": self.database.dialect,
- "table_info": self.database.table_simple_info(),
+ "table_info": table_infos,
"supported_chat_type": self.dashboard_template["supported_chart_type"],
}
diff --git a/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/data_loader.py b/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/data_loader.py
index b2184ea59..faab5d4b3 100644
--- a/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/data_loader.py
+++ b/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/data_loader.py
@@ -21,104 +21,97 @@ class DashboardDataLoader:
logger.info(f"get_chart_values_by_conn:{chart_sql}")
try:
values: List[ValueItem] = []
- data_map = {}
- data_map.update(
- {
- f"{field_name}": [row[index] for row in datas]
- for index, field_name in enumerate(field_names)
- }
+ if not datas:
+ return field_names, values
+ # try to find string index
+ string_index = next(
+ (
+ index
+ for index, value in enumerate(datas[0])
+ if isinstance(value, str)
+ ),
+ -1,
)
- # to Check Whether there are data in it
- if len(datas) != 0:
- # try to find string index
- string_index = next(
- (
- index
- for index, value in enumerate(datas[0])
- if isinstance(value, str)
- ),
- -1,
- )
- # try to find datetime index
- datetime_index = next(
- (
- index
- for index, value in enumerate(datas[0])
- if isinstance(value, (datetime.date, datetime.datetime))
- ),
- -1,
- )
+ # try to find datetime index
+ datetime_index = next(
+ (
+ index
+ for index, value in enumerate(datas[0])
+ if isinstance(value, (datetime.date, datetime.datetime))
+ ),
+ -1,
+ )
- # on the other aspect the primary key including "id"
- id_index = next(
- (index for index, value in enumerate(field_names) if "id" in value),
- -1,
- )
- # while there are no datetime and there are no string
- if string_index == -1 and datetime_index == -1 and id_index == -1:
- # ignore Null Value in the data
- result = [
- sum(values for values in data if values is not None)
- for data in zip(*datas)
- ]
- for index, field_name in enumerate(field_names):
- value_item = ValueItem(
- name=field_name,
- type=f"{field_name}_amount",
- value=str(result[index]),
- )
- values.append(value_item)
-
- # there are string index (or/and) datetime;
- # first choose string->datetime->id
- else:
- # triple judge index
- primary_index = (
- string_index
- if string_index != -1
- else (datetime_index if datetime_index != -1 else id_index)
+ # on the other aspect the primary key including "id"
+ id_index = next(
+ (index for index, value in enumerate(field_names) if "id" in value),
+ -1,
+ )
+ # while there are no datetime and there are no string
+ if string_index == -1 and datetime_index == -1 and id_index == -1:
+ # ignore Null Value in the data
+ result = [
+ sum(values for values in data if values is not None)
+ for data in zip(*datas)
+ ]
+ for index, field_name in enumerate(field_names):
+ value_item = ValueItem(
+ name=field_name,
+ type=f"{field_name}_amount",
+ value=str(result[index]),
)
- temp_field_name = field_names[:primary_index]
- temp_field_name.extend(field_names[primary_index + 1 :])
- for field_name in temp_field_name:
- for data in datas:
- # None Data won't be ok for the chart
- if not any(item is None for item in data):
- value_item = ValueItem(
- name=str(data[primary_index]),
- type=field_name,
- value=(
- str(data[field_names.index(field_name)])
- if not isinstance(
- type(data[field_names.index(field_name)]),
- (datetime.datetime, datetime.date),
- )
- else str(
- data[
- field_names.index(field_name)
- ].strftime("%Y%m%d")
- )
- ),
- )
- values.append(value_item)
+ values.append(value_item)
- # handle None Data as "0" for number and "19700101" for
- # datetime
- else:
- value_item = ValueItem(
- name=data[string_index],
- type=field_name,
- value=(
- "0"
- if not isinstance(
- type(data[field_names.index(field_name)]),
- (datetime.datetime, datetime.date),
+ # there are string index (or/and) datetime;
+ # first choose string->datetime->id
+ else:
+ # triple judge index
+ primary_index = (
+ string_index
+ if string_index != -1
+ else (datetime_index if datetime_index != -1 else id_index)
+ )
+ temp_field_name = field_names[:primary_index]
+ temp_field_name.extend(field_names[primary_index + 1 :])
+ for field_name in temp_field_name:
+ for data in datas:
+ # None Data won't be ok for the chart
+ if not any(item is None for item in data):
+ value_item = ValueItem(
+ name=str(data[primary_index]),
+ type=field_name,
+ value=(
+ str(data[field_names.index(field_name)])
+ if not isinstance(
+ type(data[field_names.index(field_name)]),
+ (datetime.datetime, datetime.date),
+ )
+ else str(
+ data[field_names.index(field_name)].strftime(
+ "%Y%m%d"
)
- else "19700101"
- ),
- )
- values.append(value_item)
+ )
+ ),
+ )
+ values.append(value_item)
+
+ # handle None Data as "0" for number and "19700101" for
+ # datetime
+ else:
+ value_item = ValueItem(
+ name=data[string_index],
+ type=field_name,
+ value=(
+ "0"
+ if not isinstance(
+ type(data[field_names.index(field_name)]),
+ (datetime.datetime, datetime.date),
+ )
+ else "19700101"
+ ),
+ )
+ values.append(value_item)
return field_names, values
except Exception as e:
logger.exception(f"get_chart_values_by_conn failed:{str(e)}")
diff --git a/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/data_preparation/report_schma.py b/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/data_preparation/report_schma.py
index e9b591674..77d369b8e 100644
--- a/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/data_preparation/report_schma.py
+++ b/packages/dbgpt-app/src/dbgpt_app/scene/chat_dashboard/data_preparation/report_schma.py
@@ -6,7 +6,7 @@ from dbgpt._private.pydantic import BaseModel
class ValueItem(BaseModel):
name: str
type: Optional[str] = None
- value: float
+ value: Any = None
def dict(self, *args, **kwargs):
return {"name": self.name, "type": self.type, "value": self.value}
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/404.html b/packages/dbgpt-app/src/dbgpt_app/static/web/404.html
index 227c0ca2b..461619997 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/404.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/404.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/404/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/404/index.html
index 227c0ca2b..461619997 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/404/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/404/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/Dojpbz19K63B2OOVa8USw/construct/prompt/add.json b/packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/K-FTPWVGbeMjNlLvdeDU_/construct/prompt/add.json
similarity index 100%
rename from packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/Dojpbz19K63B2OOVa8USw/construct/prompt/add.json
rename to packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/K-FTPWVGbeMjNlLvdeDU_/construct/prompt/add.json
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/Dojpbz19K63B2OOVa8USw/construct/prompt/edit.json b/packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/K-FTPWVGbeMjNlLvdeDU_/construct/prompt/edit.json
similarity index 100%
rename from packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/Dojpbz19K63B2OOVa8USw/construct/prompt/edit.json
rename to packages/dbgpt-app/src/dbgpt_app/static/web/_next/data/K-FTPWVGbeMjNlLvdeDU_/construct/prompt/edit.json
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/Dojpbz19K63B2OOVa8USw/_buildManifest.js b/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/K-FTPWVGbeMjNlLvdeDU_/_buildManifest.js
similarity index 97%
rename from packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/Dojpbz19K63B2OOVa8USw/_buildManifest.js
rename to packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/K-FTPWVGbeMjNlLvdeDU_/_buildManifest.js
index 34dc3a2fb..23b0d3294 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/Dojpbz19K63B2OOVa8USw/_buildManifest.js
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/K-FTPWVGbeMjNlLvdeDU_/_buildManifest.js
@@ -1 +1 @@
-self.__BUILD_MANIFEST=function(c,t,s,a,e,n,o,p,u,i,b,r,d,f,h,k,m,j,l,g,x,w,C,_,D,I,R,v,A,S,F,y,L,M,N,T,B,P,E,H,O,Q,U,q,z,G,J){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":[c,t,s,a,e,n,o,N,"static/chunks/8733-1e1fc970bff78378.js",D,"static/chunks/pages/index-e5d16f679dbc407f.js"],"/_error":["static/chunks/pages/_error-8095ba9e1bf12f30.js"],"/chat":[c,t,s,a,e,n,o,p,u,i,b,h,l,N,g,D,"static/chunks/pages/chat-907eac62fbf2fff6.js"],"/construct":[t,a,r,U,"static/chunks/pages/construct-f9c701adc0a10f23.js"],"/construct/agent":[c,t,a,e,n,o,r,N,"static/chunks/4502-ef22a56109b9712d.js",B,"static/chunks/pages/construct/agent-b03e0b4ea0436096.js"],"/construct/app":[c,t,s,a,e,n,o,p,r,d,k,N,"static/chunks/1088-5a4870f56904f4ed.js","static/css/286e71c2657cb947.css","static/chunks/pages/construct/app-ff2d7beca35cde23.js"],"/construct/app/components/create-app-modal":[c,s,e,d,"static/css/71b2e674cdce283c.css","static/chunks/pages/construct/app/components/create-app-modal-39e4fe888a8b14ef.js"],"/construct/app/extra":[m,x,I,R,v,A,S,F,E,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,P,H,O,M,g,Q,"static/css/6eaf9c6ea2c5ea2f.css","static/chunks/pages/construct/app/extra-fb98d577200e8665.js"],"/construct/app/extra/components/AwelLayout":[E,t,p,d,H,q,"static/chunks/pages/construct/app/extra/components/AwelLayout-0a41ff5110af9246.js"],"/construct/app/extra/components/NativeApp":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,"static/chunks/5615-4b95e458e9d9d3b9.js",M,g,D,"static/chunks/pages/construct/app/extra/components/NativeApp-4448f0809b2fc5f2.js"],"/construct/app/extra/components/RecommendQuestions":[c,s,d,"static/css/baa1b56aac6681e7.css","static/chunks/pages/construct/app/extra/components/RecommendQuestions-d6c6760fd53edc23.js"],"/construct/app/extra/components/auto-plan":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,P,O,M,g,Q,D,"static/chunks/pages/construct/app/extra/components/auto-plan-6567b1c05c9ec229.js"],"/construct/app/extra/components/auto-plan/DetailsCard":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,P,O,M,g,Q,D,"static/chunks/pages/construct/app/extra/components/auto-plan/DetailsCard-cb6ba730924f6b45.js"],"/construct/app/extra/components/auto-plan/PromptSelect":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,k,b,j,w,h,y,C,L,_,l,"static/chunks/3387-a9084e5a2d4d90a9.js",M,g,D,"static/chunks/pages/construct/app/extra/components/auto-plan/PromptSelect-f600540bf85cabbf.js"],"/construct/app/extra/components/auto-plan/ResourceContent":[t,p,d,"static/chunks/pages/construct/app/extra/components/auto-plan/ResourceContent-79f9f95c110c4881.js"],"/construct/app/extra/components/auto-plan/ResourcesCard":[m,c,t,o,p,d,P,"static/chunks/pages/construct/app/extra/components/auto-plan/ResourcesCard-f20e815232b5874b.js"],"/construct/app/extra/config":["static/chunks/pages/construct/app/extra/config-22c5ff4c03d2e790.js"],"/construct/database":[c,t,s,a,e,p,r,f,d,h,z,G,U,"static/chunks/pages/construct/database-4e9eaf9453d17158.js"],"/construct/dbgpts":[c,t,s,a,e,n,o,r,N,"static/chunks/9277-155b475ba8c175d1.js",B,"static/chunks/pages/construct/dbgpts-f064ec6183ee9ce8.js"],"/construct/flow":[c,t,s,a,e,n,o,p,r,f,d,k,"static/chunks/9223-898045662f8f9aaf.js",B,"static/chunks/pages/construct/flow-b6734aef79ffa4fa.js"],"/construct/flow/canvas":[m,E,c,t,s,a,e,n,o,p,u,f,i,d,k,j,h,l,"static/chunks/3764-90db3ed836a41b68.js",H,J,"static/chunks/7855-b4b1ad532aea6294.js","static/chunks/9954-c8a30dfc49bbfa1a.js",q,"static/chunks/pages/construct/flow/canvas-6c5c3838ad424698.js"],"/construct/flow/libro":["static/chunks/pages/construct/flow/libro-ef0a3eabd6a60a7c.js"],"/construct/knowledge":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,J,"static/chunks/651-abeef162214c0b9e.js",M,g,B,"static/chunks/pages/construct/knowledge-bf39d10fd02a96e1.js"],"/construct/knowledge/chunk":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,"static/chunks/1500-d3d41b2f6d82f859.js",M,g,D,"static/chunks/pages/construct/knowledge/chunk-3e624bd596c18dcc.js"],"/construct/models":[c,t,s,a,n,o,p,r,f,d,h,C,z,B,"static/chunks/pages/construct/models-3c09723fb6a9b75d.js"],"/construct/prompt":[c,t,s,a,e,n,o,p,r,f,k,j,N,"static/css/6f3f201b5cbc2e30.css","static/chunks/pages/construct/prompt-05fd69727ee7ba35.js"],"/construct/prompt/[type]":[c,t,s,a,p,r,i,d,b,h,_,G,"static/chunks/5396-52bf019cbb5ec9e6.js","static/css/279c58a83be8d59c.css","static/chunks/pages/construct/prompt/[type]-56879fdd229957d9.js"],"/evaluation":[c,t,s,a,e,n,p,u,f,d,k,j,N,"static/chunks/4833-3f1c9f62a70aa547.js","static/chunks/pages/evaluation-19a12671e204ab30.js"],"/knowledge/graph":[m,x,e,w,"static/chunks/2973-fdc1592501026593.js","static/chunks/4744-a431699d60da1732.js","static/chunks/5558-c3c1f07b8ed25ee2.js","static/chunks/pages/knowledge/graph-4c62aded08a8fcdf.js"],"/mobile/chat":[c,t,s,a,e,n,o,u,i,b,"static/chunks/5005-847957d83300cf4e.js",T,"static/chunks/pages/mobile/chat-622a6cdf07c4be28.js"],"/mobile/chat/components/ChatDialog":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,k,b,j,w,h,y,C,L,_,l,"static/chunks/2105-0b96e55d662e38bc.js",M,g,D,"static/chunks/pages/mobile/chat/components/ChatDialog-8e5e3540d4723510.js"],"/mobile/chat/components/Content":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,k,b,j,w,h,y,C,L,_,l,"static/chunks/2860-ab34ed021ff52af2.js",M,g,D,"static/chunks/pages/mobile/chat/components/Content-cd8e3d52a83fb57e.js"],"/mobile/chat/components/DislikeDrawer":[c,s,"static/chunks/pages/mobile/chat/components/DislikeDrawer-6abdf68a6518fb52.js"],"/mobile/chat/components/Feedback":[c,t,s,a,e,n,o,u,i,b,"static/chunks/4354-e57cde4433c5fd5c.js",T,"static/chunks/pages/mobile/chat/components/Feedback-2fde0924fbbeed10.js"],"/mobile/chat/components/Header":[c,t,s,a,e,n,o,u,i,b,"static/chunks/5654-e2fb6910235d251d.js",T,"static/chunks/pages/mobile/chat/components/Header-9dc1942a4484521c.js"],"/mobile/chat/components/InputContainer":[c,t,s,a,e,n,o,u,i,b,"static/chunks/1390-db1d6f8281c4dd59.js",T,"static/chunks/pages/mobile/chat/components/InputContainer-fa85310076f5fa4d.js"],"/mobile/chat/components/ModelSelector":[c,t,s,a,e,n,o,u,i,b,"static/chunks/950-88c84d615a45ac96.js",T,"static/chunks/pages/mobile/chat/components/ModelSelector-c8b471e7a8368aba.js"],"/mobile/chat/components/OptionIcon":["static/chunks/pages/mobile/chat/components/OptionIcon-9b7b2b198d5ee1f1.js"],"/mobile/chat/components/Resource":[c,t,s,a,e,n,o,u,i,b,"static/chunks/6047-26e7e176b04ca9f3.js",T,"static/chunks/pages/mobile/chat/components/Resource-cd0d918ae1ceaa67.js"],"/mobile/chat/components/Thermometer":[c,t,s,a,e,n,o,u,i,b,"static/chunks/1437-13a9042f2fa6daf7.js",T,"static/chunks/pages/mobile/chat/components/Thermometer-313450ba4abca4a2.js"],sortedPages:["/","/_app","/_error","/chat","/construct","/construct/agent","/construct/app","/construct/app/components/create-app-modal","/construct/app/extra","/construct/app/extra/components/AwelLayout","/construct/app/extra/components/NativeApp","/construct/app/extra/components/RecommendQuestions","/construct/app/extra/components/auto-plan","/construct/app/extra/components/auto-plan/DetailsCard","/construct/app/extra/components/auto-plan/PromptSelect","/construct/app/extra/components/auto-plan/ResourceContent","/construct/app/extra/components/auto-plan/ResourcesCard","/construct/app/extra/config","/construct/database","/construct/dbgpts","/construct/flow","/construct/flow/canvas","/construct/flow/libro","/construct/knowledge","/construct/knowledge/chunk","/construct/models","/construct/prompt","/construct/prompt/[type]","/evaluation","/knowledge/graph","/mobile/chat","/mobile/chat/components/ChatDialog","/mobile/chat/components/Content","/mobile/chat/components/DislikeDrawer","/mobile/chat/components/Feedback","/mobile/chat/components/Header","/mobile/chat/components/InputContainer","/mobile/chat/components/ModelSelector","/mobile/chat/components/OptionIcon","/mobile/chat/components/Resource","/mobile/chat/components/Thermometer"]}}("static/chunks/2913-315ad705b1306902.js","static/chunks/3791-58df908ca3784958.js","static/chunks/5278-36ac2f07bcb92504.js","static/chunks/8791-d36492edb39795c5.js","static/chunks/4330-a1b5cee9f3b8b8f7.js","static/chunks/1049-b2925c4c7e1e37be.js","static/chunks/5030-ed144c49e325cd61.js","static/chunks/4041-5492a10899848bfe.js","static/chunks/3799-d48c841202a23ed2.js","static/chunks/2684-73933877255629e3.js","static/chunks/6231-082aa9c179c552ae.js","static/chunks/2398-80f576e59bf84b54.js","static/chunks/9859-0f9a257d2a611e9c.js","static/chunks/4567-e13d92805b9a662c.js","static/chunks/3457-105f31ebfbb8ea1c.js","static/chunks/1300-d15ca5298cec4f7e.js","static/chunks/29107295-75edf0bf34e24b1e.js","static/chunks/9773-d9f5901b80287410.js","static/chunks/5782-c716125f96f3c46d.js","static/chunks/7249-0257990fb004d1e0.js","static/chunks/355a6ca7-744d111cb90d9a0e.js","static/chunks/4035-e44efbdb196bb006.js","static/chunks/2510-48a15f9b508d4371.js","static/chunks/9202-a18f5e3aa6a290da.js","static/css/9b601b4de5d78ac2.css","static/chunks/d9005de1-9554a68697ca3836.js","static/chunks/f9a75a99-95eebf4be8f76543.js","static/chunks/33a1eaa4-7856035046c28279.js","static/chunks/008713dc-dc1f72d2eff49743.js","static/chunks/554c6155-1a171fdb837a225b.js","static/chunks/4d857c35-6c3c1ca79b606788.js","static/chunks/152-56fad3e011927332.js","static/chunks/8592-ebdb32e965a5eb5d.js","static/chunks/626-5ea69fdbcb1e1a19.js","static/chunks/2783-67b811a852a75cad.js","static/chunks/3913-94e95819b7a3175b.js","static/css/f50ad89cce84a0a9.css","static/chunks/4745-5baace070c6fa86f.js","static/chunks/971df74e-f3c263af350cb1b6.js","static/chunks/1278-edc9b98f2c09de56.js","static/chunks/8587-971ed2abcff8ed71.js","static/chunks/8510-87c1e11c131b1df8.js","static/css/8ff116f2992cd086.css","static/css/a275cc2b185e04f8.css","static/chunks/7896-9a2711a6663ea90e.js","static/chunks/4393-bd13a27cd00a20d6.js","static/chunks/8914-e39d5b3463812745.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
\ No newline at end of file
+self.__BUILD_MANIFEST=function(c,t,s,a,e,n,o,p,u,i,b,r,d,f,h,k,m,j,l,g,x,w,C,_,D,I,R,v,A,S,F,y,L,M,N,T,B,P,E,H,O,Q,U,q,z,G,J){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":[c,t,s,a,e,n,o,N,"static/chunks/8733-1e1fc970bff78378.js",D,"static/chunks/pages/index-e5d16f679dbc407f.js"],"/_error":["static/chunks/pages/_error-8095ba9e1bf12f30.js"],"/chat":[c,t,s,a,e,n,o,p,u,i,b,h,l,N,g,D,"static/chunks/pages/chat-907eac62fbf2fff6.js"],"/construct":[t,a,r,U,"static/chunks/pages/construct-f9c701adc0a10f23.js"],"/construct/agent":[c,t,a,e,n,o,r,N,"static/chunks/4502-ef22a56109b9712d.js",B,"static/chunks/pages/construct/agent-b03e0b4ea0436096.js"],"/construct/app":[c,t,s,a,e,n,o,p,r,d,k,N,"static/chunks/1088-5a4870f56904f4ed.js","static/css/286e71c2657cb947.css","static/chunks/pages/construct/app-ff2d7beca35cde23.js"],"/construct/app/components/create-app-modal":[c,s,e,d,"static/css/71b2e674cdce283c.css","static/chunks/pages/construct/app/components/create-app-modal-39e4fe888a8b14ef.js"],"/construct/app/extra":[m,x,I,R,v,A,S,F,E,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,P,H,O,M,g,Q,"static/css/6eaf9c6ea2c5ea2f.css","static/chunks/pages/construct/app/extra-fb98d577200e8665.js"],"/construct/app/extra/components/AwelLayout":[E,t,p,d,H,q,"static/chunks/pages/construct/app/extra/components/AwelLayout-0a41ff5110af9246.js"],"/construct/app/extra/components/NativeApp":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,"static/chunks/5615-4b95e458e9d9d3b9.js",M,g,D,"static/chunks/pages/construct/app/extra/components/NativeApp-4448f0809b2fc5f2.js"],"/construct/app/extra/components/RecommendQuestions":[c,s,d,"static/css/baa1b56aac6681e7.css","static/chunks/pages/construct/app/extra/components/RecommendQuestions-d6c6760fd53edc23.js"],"/construct/app/extra/components/auto-plan":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,P,O,M,g,Q,D,"static/chunks/pages/construct/app/extra/components/auto-plan-6567b1c05c9ec229.js"],"/construct/app/extra/components/auto-plan/DetailsCard":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,P,O,M,g,Q,D,"static/chunks/pages/construct/app/extra/components/auto-plan/DetailsCard-cb6ba730924f6b45.js"],"/construct/app/extra/components/auto-plan/PromptSelect":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,k,b,j,w,h,y,C,L,_,l,"static/chunks/3387-a9084e5a2d4d90a9.js",M,g,D,"static/chunks/pages/construct/app/extra/components/auto-plan/PromptSelect-f600540bf85cabbf.js"],"/construct/app/extra/components/auto-plan/ResourceContent":[t,p,d,"static/chunks/pages/construct/app/extra/components/auto-plan/ResourceContent-79f9f95c110c4881.js"],"/construct/app/extra/components/auto-plan/ResourcesCard":[m,c,t,o,p,d,P,"static/chunks/pages/construct/app/extra/components/auto-plan/ResourcesCard-f20e815232b5874b.js"],"/construct/app/extra/config":["static/chunks/pages/construct/app/extra/config-22c5ff4c03d2e790.js"],"/construct/database":[c,t,s,a,e,p,r,f,d,h,z,G,U,"static/chunks/pages/construct/database-4e9eaf9453d17158.js"],"/construct/dbgpts":[c,t,s,a,e,n,o,r,N,"static/chunks/9277-155b475ba8c175d1.js",B,"static/chunks/pages/construct/dbgpts-f064ec6183ee9ce8.js"],"/construct/flow":[c,t,s,a,e,n,o,p,r,f,d,k,"static/chunks/9223-898045662f8f9aaf.js",B,"static/chunks/pages/construct/flow-b6734aef79ffa4fa.js"],"/construct/flow/canvas":[m,E,c,t,s,a,e,n,o,p,u,f,i,d,k,j,h,l,"static/chunks/3764-90db3ed836a41b68.js",H,J,"static/chunks/7855-b4b1ad532aea6294.js","static/chunks/9954-c8a30dfc49bbfa1a.js",q,"static/chunks/pages/construct/flow/canvas-6c5c3838ad424698.js"],"/construct/flow/libro":["static/chunks/pages/construct/flow/libro-ef0a3eabd6a60a7c.js"],"/construct/knowledge":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,J,"static/chunks/651-abeef162214c0b9e.js",M,g,B,"static/chunks/pages/construct/knowledge-bf39d10fd02a96e1.js"],"/construct/knowledge/chunk":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,d,k,b,j,w,h,y,C,L,_,l,"static/chunks/1500-d3d41b2f6d82f859.js",M,g,D,"static/chunks/pages/construct/knowledge/chunk-3e624bd596c18dcc.js"],"/construct/models":[c,t,s,a,n,o,p,r,f,d,h,C,z,B,"static/chunks/pages/construct/models-3c09723fb6a9b75d.js"],"/construct/prompt":[c,t,s,a,e,n,o,p,r,f,k,j,N,"static/css/6f3f201b5cbc2e30.css","static/chunks/pages/construct/prompt-05fd69727ee7ba35.js"],"/construct/prompt/[type]":[c,t,s,a,p,r,i,d,b,h,_,G,"static/chunks/5396-52bf019cbb5ec9e6.js","static/css/279c58a83be8d59c.css","static/chunks/pages/construct/prompt/[type]-56879fdd229957d9.js"],"/evaluation":[c,t,s,a,e,n,p,u,f,d,k,j,N,"static/chunks/4833-3f1c9f62a70aa547.js","static/chunks/pages/evaluation-19a12671e204ab30.js"],"/knowledge/graph":[m,x,e,w,"static/chunks/2973-fdc1592501026593.js","static/chunks/4744-a431699d60da1732.js","static/chunks/5558-c3c1f07b8ed25ee2.js","static/chunks/pages/knowledge/graph-4c62aded08a8fcdf.js"],"/mobile/chat":[c,t,s,a,e,n,o,u,i,b,"static/chunks/5005-847957d83300cf4e.js",T,"static/chunks/pages/mobile/chat-622a6cdf07c4be28.js"],"/mobile/chat/components/ChatDialog":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,k,b,j,w,h,y,C,L,_,l,"static/chunks/2105-0b96e55d662e38bc.js",M,g,D,"static/chunks/pages/mobile/chat/components/ChatDialog-8e5e3540d4723510.js"],"/mobile/chat/components/Content":[m,x,I,R,v,A,S,F,c,t,s,a,e,n,o,p,r,u,f,i,k,b,j,w,h,y,C,L,_,l,"static/chunks/2860-ab34ed021ff52af2.js",M,g,D,"static/chunks/pages/mobile/chat/components/Content-cd8e3d52a83fb57e.js"],"/mobile/chat/components/DislikeDrawer":[c,s,"static/chunks/pages/mobile/chat/components/DislikeDrawer-6abdf68a6518fb52.js"],"/mobile/chat/components/Feedback":[c,t,s,a,e,n,o,u,i,b,"static/chunks/4354-e57cde4433c5fd5c.js",T,"static/chunks/pages/mobile/chat/components/Feedback-2fde0924fbbeed10.js"],"/mobile/chat/components/Header":[c,t,s,a,e,n,o,u,i,b,"static/chunks/1390-db1d6f8281c4dd59.js",T,"static/chunks/pages/mobile/chat/components/Header-812c0dd51a64e53b.js"],"/mobile/chat/components/InputContainer":[c,t,s,a,e,n,o,u,i,b,"static/chunks/5654-e2fb6910235d251d.js",T,"static/chunks/pages/mobile/chat/components/InputContainer-d9adf4858c7f1201.js"],"/mobile/chat/components/ModelSelector":[c,t,s,a,e,n,o,u,i,b,"static/chunks/950-88c84d615a45ac96.js",T,"static/chunks/pages/mobile/chat/components/ModelSelector-c8b471e7a8368aba.js"],"/mobile/chat/components/OptionIcon":["static/chunks/pages/mobile/chat/components/OptionIcon-9b7b2b198d5ee1f1.js"],"/mobile/chat/components/Resource":[c,t,s,a,e,n,o,u,i,b,"static/chunks/6047-26e7e176b04ca9f3.js",T,"static/chunks/pages/mobile/chat/components/Resource-cd0d918ae1ceaa67.js"],"/mobile/chat/components/Thermometer":[c,t,s,a,e,n,o,u,i,b,"static/chunks/1437-13a9042f2fa6daf7.js",T,"static/chunks/pages/mobile/chat/components/Thermometer-313450ba4abca4a2.js"],sortedPages:["/","/_app","/_error","/chat","/construct","/construct/agent","/construct/app","/construct/app/components/create-app-modal","/construct/app/extra","/construct/app/extra/components/AwelLayout","/construct/app/extra/components/NativeApp","/construct/app/extra/components/RecommendQuestions","/construct/app/extra/components/auto-plan","/construct/app/extra/components/auto-plan/DetailsCard","/construct/app/extra/components/auto-plan/PromptSelect","/construct/app/extra/components/auto-plan/ResourceContent","/construct/app/extra/components/auto-plan/ResourcesCard","/construct/app/extra/config","/construct/database","/construct/dbgpts","/construct/flow","/construct/flow/canvas","/construct/flow/libro","/construct/knowledge","/construct/knowledge/chunk","/construct/models","/construct/prompt","/construct/prompt/[type]","/evaluation","/knowledge/graph","/mobile/chat","/mobile/chat/components/ChatDialog","/mobile/chat/components/Content","/mobile/chat/components/DislikeDrawer","/mobile/chat/components/Feedback","/mobile/chat/components/Header","/mobile/chat/components/InputContainer","/mobile/chat/components/ModelSelector","/mobile/chat/components/OptionIcon","/mobile/chat/components/Resource","/mobile/chat/components/Thermometer"]}}("static/chunks/2913-315ad705b1306902.js","static/chunks/3791-58df908ca3784958.js","static/chunks/5278-36ac2f07bcb92504.js","static/chunks/8791-d36492edb39795c5.js","static/chunks/4330-a1b5cee9f3b8b8f7.js","static/chunks/1049-b2925c4c7e1e37be.js","static/chunks/5030-ed144c49e325cd61.js","static/chunks/4041-5492a10899848bfe.js","static/chunks/3799-d48c841202a23ed2.js","static/chunks/2684-73933877255629e3.js","static/chunks/6231-082aa9c179c552ae.js","static/chunks/2398-80f576e59bf84b54.js","static/chunks/9859-0f9a257d2a611e9c.js","static/chunks/4567-e13d92805b9a662c.js","static/chunks/3457-105f31ebfbb8ea1c.js","static/chunks/1300-d15ca5298cec4f7e.js","static/chunks/29107295-75edf0bf34e24b1e.js","static/chunks/9773-d9f5901b80287410.js","static/chunks/5782-c716125f96f3c46d.js","static/chunks/7249-0257990fb004d1e0.js","static/chunks/355a6ca7-744d111cb90d9a0e.js","static/chunks/4035-e44efbdb196bb006.js","static/chunks/2510-48a15f9b508d4371.js","static/chunks/9202-a18f5e3aa6a290da.js","static/css/9b601b4de5d78ac2.css","static/chunks/d9005de1-9554a68697ca3836.js","static/chunks/f9a75a99-95eebf4be8f76543.js","static/chunks/33a1eaa4-7856035046c28279.js","static/chunks/008713dc-dc1f72d2eff49743.js","static/chunks/554c6155-1a171fdb837a225b.js","static/chunks/4d857c35-6c3c1ca79b606788.js","static/chunks/152-56fad3e011927332.js","static/chunks/8592-ebdb32e965a5eb5d.js","static/chunks/626-5ea69fdbcb1e1a19.js","static/chunks/2783-67b811a852a75cad.js","static/chunks/3913-94e95819b7a3175b.js","static/css/f50ad89cce84a0a9.css","static/chunks/4745-5baace070c6fa86f.js","static/chunks/971df74e-f3c263af350cb1b6.js","static/chunks/1278-edc9b98f2c09de56.js","static/chunks/8587-971ed2abcff8ed71.js","static/chunks/8510-87c1e11c131b1df8.js","static/css/8ff116f2992cd086.css","static/css/a275cc2b185e04f8.css","static/chunks/7896-9a2711a6663ea90e.js","static/chunks/4393-bd13a27cd00a20d6.js","static/chunks/8914-e39d5b3463812745.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/Dojpbz19K63B2OOVa8USw/_ssgManifest.js b/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/K-FTPWVGbeMjNlLvdeDU_/_ssgManifest.js
similarity index 100%
rename from packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/Dojpbz19K63B2OOVa8USw/_ssgManifest.js
rename to packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/K-FTPWVGbeMjNlLvdeDU_/_ssgManifest.js
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/4769.0edd051d9b3a4801.js b/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/4769.0edd051d9b3a4801.js
deleted file mode 100644
index 0b304c159..000000000
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/_next/static/chunks/4769.0edd051d9b3a4801.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4769],{36517:function(e,t,l){"use strict";l.r(t),l.d(t,{default:function(){return eI}});var n=l(85893),a=l(41468),s=l(76212),r=l(43446),o=l(62418),i=l(2093),c=l(93967),d=l.n(c),u=l(39332),x=l(67294),m=l(39156),h=l(91085),p=l(45247),f=()=>{let{history:e,setHistory:t,chatId:l,model:n,docId:o}=(0,x.useContext)(a.p),{chat:i}=(0,r.Z)({queryAgentURL:"/knowledge/document/summary"}),c=(0,x.useCallback)(async e=>{let[,a]=await (0,s.Vx)((0,s.$i)(l)),r=[...a,{role:"human",context:"",model_name:n,order:0,time_stamp:0},{role:"view",context:"",model_name:n,order:0,time_stamp:0,retry:!0}],c=r.length-1;t([...r]),await i({data:{doc_id:e||o,model_name:n},chatId:l,onMessage:e=>{r[c].context=e,t([...r])}})},[e,n,o,l]);return c},v=l(87740),g=l(57132),j=l(66478),w=l(14553),b=l(45360),y=l(83062),Z=l(85576),_=l(20640),N=l.n(_),C=l(96486),P=l(67421),k=l(27496),S=l(25278),R=l(14726),E=l(11163),I=l(82353),D=l(1051);function F(e){let{document:t}=e;switch(t.status){case"RUNNING":return(0,n.jsx)(I.Rp,{});case"FINISHED":default:return(0,n.jsx)(I.s2,{});case"FAILED":return(0,n.jsx)(D.Z,{})}}function M(e){let{documents:t,dbParam:l}=e,a=(0,E.useRouter)(),s=e=>{a.push("/knowledge/chunk/?spaceName=".concat(l,"&id=").concat(e))};return(null==t?void 0:t.length)?(0,n.jsx)("div",{className:"absolute flex overflow-scroll h-12 top-[-35px] w-full z-10",children:t.map(e=>{let t;switch(e.status){case"RUNNING":t="#2db7f5";break;case"FINISHED":default:t="#87d068";break;case"FAILED":t="#f50"}return(0,n.jsx)(y.Z,{title:e.result,children:(0,n.jsxs)(R.ZP,{style:{color:t},onClick:()=>{s(e.id)},className:"shrink flex items-center mr-3",children:[(0,n.jsx)(F,{document:e}),e.doc_name]})},e.id)})}):null}var U=l(5392),L=l(23799);function O(e){let{dbParam:t,setDocId:l}=(0,x.useContext)(a.p),{onUploadFinish:r,handleFinish:o}=e,i=f(),[c,d]=(0,x.useState)(!1),u=async e=>{d(!0);let n=new FormData;n.append("doc_name",e.file.name),n.append("doc_file",e.file),n.append("doc_type","DOCUMENT");let a=await (0,s.Vx)((0,s.iG)(t||"default",n));if(!a[1]){d(!1);return}l(a[1]),r(),d(!1),null==o||o(!0),await i(a[1]),null==o||o(!1)};return(0,n.jsx)(L.default,{customRequest:u,showUploadList:!1,maxCount:1,multiple:!1,className:"absolute z-10 top-2 left-2",accept:".pdf,.ppt,.pptx,.xls,.xlsx,.doc,.docx,.txt,.md",children:(0,n.jsx)(R.ZP,{loading:c,size:"small",shape:"circle",icon:(0,n.jsx)(U.Z,{})})})}var $=l(30119),A=l(65654),V=l(2487),G=l(28459),z=l(55241),H=l(99859),q=l(34041),B=l(12652);let T=e=>{let{data:t,loading:l,submit:a,close:s}=e,{t:r}=(0,P.$G)(),o=e=>()=>{a(e),s()};return(0,n.jsx)("div",{style:{maxHeight:400,overflow:"auto"},children:(0,n.jsx)(V.Z,{dataSource:null==t?void 0:t.data,loading:l,rowKey:e=>e.prompt_name,renderItem:e=>(0,n.jsx)(V.Z.Item,{onClick:o(e.content),children:(0,n.jsx)(y.Z,{title:e.content,children:(0,n.jsx)(V.Z.Item.Meta,{style:{cursor:"copy"},title:e.prompt_name,description:r("Prompt_Info_Scene")+":".concat(e.chat_scene,",")+r("Prompt_Info_Sub_Scene")+":".concat(e.sub_chat_scene)})})},e.prompt_name)})})};var J=e=>{let{submit:t}=e,{t:l}=(0,P.$G)(),[a,s]=(0,x.useState)(!1),[r,o]=(0,x.useState)("common"),{data:i,loading:c}=(0,A.Z)(()=>(0,$.PR)("/prompt/list",{prompt_type:r}),{refreshDeps:[r],onError:e=>{b.ZP.error(null==e?void 0:e.message)}});return(0,n.jsx)(G.ZP,{theme:{components:{Popover:{minWidth:250}}},children:(0,n.jsx)(z.Z,{title:(0,n.jsx)(H.default.Item,{label:"Prompt "+l("Type"),children:(0,n.jsx)(q.default,{style:{width:150},value:r,onChange:e=>{o(e)},options:[{label:l("Public")+" Prompts",value:"common"},{label:l("Private")+" Prompts",value:"private"}]})}),content:(0,n.jsx)(T,{data:i,loading:c,submit:t,close:()=>{s(!1)}}),placement:"topRight",trigger:"click",open:a,onOpenChange:e=>{s(e)},children:(0,n.jsx)(y.Z,{title:l("Click_Select")+" Prompt",children:(0,n.jsx)(B.Z,{className:"bottom-[30%]"})})})})},Q=function(e){let{children:t,loading:l,onSubmit:r,handleFinish:o,placeholder:i,...c}=e,{dbParam:d,scene:u}=(0,x.useContext)(a.p),[m,h]=(0,x.useState)(""),p=(0,x.useMemo)(()=>"chat_knowledge"===u,[u]),[f,v]=(0,x.useState)([]),g=(0,x.useRef)(0);async function j(){if(!d)return null;let[e,t]=await (0,s.Vx)((0,s._Q)(d,{page:1,page_size:g.current}));v((null==t?void 0:t.data)||[])}(0,x.useEffect)(()=>{p&&j()},[d]);let w=async()=>{g.current+=1,await j()};return(0,n.jsxs)("div",{className:"flex-1 relative",children:[(0,n.jsx)(M,{documents:f,dbParam:d}),p&&(0,n.jsx)(O,{handleFinish:o,onUploadFinish:w,className:"absolute z-10 top-2 left-2"}),(0,n.jsx)(S.default.TextArea,{className:"flex-1 ".concat(p?"pl-10":""," pr-10"),size:"large",value:m,autoSize:{minRows:1,maxRows:4},...c,onPressEnter:e=>{if(m.trim()&&13===e.keyCode){if(e.shiftKey){e.preventDefault(),h(e=>e+"\n");return}r(m),setTimeout(()=>{h("")},0)}},onChange:e=>{if("number"==typeof c.maxLength){h(e.target.value.substring(0,c.maxLength));return}h(e.target.value)},placeholder:i}),(0,n.jsx)(R.ZP,{className:"ml-2 flex items-center justify-center absolute right-0 bottom-0",size:"large",type:"text",loading:l,icon:(0,n.jsx)(k.Z,{}),onClick:()=>{r(m)}}),(0,n.jsx)(J,{submit:e=>{h(m+e)}}),t]})},W=l(32975),K=l(14660),X=l(13185),Y=(0,x.memo)(function(e){var t;let{content:l}=e,{scene:s}=(0,x.useContext)(a.p),r="view"===l.role;return(0,n.jsx)("div",{className:d()("relative w-full p-2 md:p-4 rounded-xl break-words",{"bg-white dark:bg-[#232734]":r,"lg:w-full xl:w-full pl-0":["chat_with_db_execute","chat_dashboard"].includes(s)}),children:r?(0,n.jsx)(W.Z,{components:X.Z,rehypePlugins:[K.Z],children:null==(t=l.context)?void 0:t.replace(/
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/agent/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/agent/index.html
index a6a4b7345..556ac4d8f 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/agent/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/agent/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/components/create-app-modal/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/components/create-app-modal/index.html
index fc3ec60ed..f505ad9f3 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/components/create-app-modal/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/components/create-app-modal/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/AwelLayout/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/AwelLayout/index.html
index dd3d03a62..72aabb365 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/AwelLayout/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/AwelLayout/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/NativeApp/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/NativeApp/index.html
index a8dfda733..f48eaa436 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/NativeApp/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/NativeApp/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/RecommendQuestions/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/RecommendQuestions/index.html
index 93afc735d..b52e25d7f 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/RecommendQuestions/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/RecommendQuestions/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/DetailsCard/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/DetailsCard/index.html
index 7dca3e891..60ff7b1a9 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/DetailsCard/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/DetailsCard/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/PromptSelect/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/PromptSelect/index.html
index 4646c8480..c5a522946 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/PromptSelect/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/PromptSelect/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/ResourceContent/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/ResourceContent/index.html
index b49a45e0f..896900a1f 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/ResourceContent/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/ResourceContent/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/ResourcesCard/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/ResourcesCard/index.html
index 9cc6d9a45..e8676af50 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/ResourcesCard/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/ResourcesCard/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/index.html
index 5c5118b95..666ff8105 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/components/auto-plan/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/config/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/config/index.html
index bbdaa9d8c..a012b4bd8 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/config/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/config/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/index.html
index 93fe7d3cb..deda90dc2 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/extra/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/index.html
index 45d3aa827..477738000 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/app/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/database/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/database/index.html
index 9f019f977..bc18bd4cf 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/database/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/database/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/dbgpts/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/dbgpts/index.html
index 0181e74e0..60d86e3a2 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/dbgpts/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/dbgpts/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/canvas/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/canvas/index.html
index ec3893a05..a7693e792 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/canvas/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/canvas/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/index.html
index a9c69f885..ce74e0ac6 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/libro/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/libro/index.html
index 3d1855fbe..cfd0cfca6 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/libro/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/flow/libro/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/index.html
index bfe936f2a..bd9d0363f 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/knowledge/chunk/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/knowledge/chunk/index.html
index 966d8dae9..fa9589060 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/knowledge/chunk/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/knowledge/chunk/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/knowledge/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/knowledge/index.html
index 5eda3fe1a..bf6e0ebd8 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/knowledge/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/knowledge/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/models/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/models/index.html
index c29b0ddf5..de9820a10 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/models/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/models/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/add/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/add/index.html
index 019d7dd09..cf19407b8 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/add/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/add/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/edit/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/edit/index.html
index 0b3e8ffdb..8b35c13c5 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/edit/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/edit/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/index.html
index 50d9e5350..b40fdefc4 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/construct/prompt/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/evaluation/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/evaluation/index.html
index 89ea2ed8c..85468cb0a 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/evaluation/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/evaluation/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/index.html
index 232acb524..59e5ab117 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/knowledge/graph/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/knowledge/graph/index.html
index 23012716a..334fdabb4 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/knowledge/graph/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/knowledge/graph/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/ChatDialog/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/ChatDialog/index.html
index b8327f245..eab9db1df 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/ChatDialog/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/ChatDialog/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Content/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Content/index.html
index df60a10e9..e11920f36 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Content/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Content/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/DislikeDrawer/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/DislikeDrawer/index.html
index 19a6181c4..eb983030f 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/DislikeDrawer/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/DislikeDrawer/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Feedback/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Feedback/index.html
index b12c5da77..6a92041b6 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Feedback/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Feedback/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Header/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Header/index.html
index 5ac584e11..f9f3248fc 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Header/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Header/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/InputContainer/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/InputContainer/index.html
index 745f4f89d..5953db3d4 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/InputContainer/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/InputContainer/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/ModelSelector/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/ModelSelector/index.html
index 64ded63f2..150191283 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/ModelSelector/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/ModelSelector/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/OptionIcon/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/OptionIcon/index.html
index f40d2822c..49e6f7de7 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/OptionIcon/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/OptionIcon/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Resource/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Resource/index.html
index 7f801d238..d24933b3c 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Resource/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Resource/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Thermometer/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Thermometer/index.html
index 546c49990..3481a77f4 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Thermometer/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/components/Thermometer/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/index.html b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/index.html
index a6e9f888c..5d5636ef8 100644
--- a/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/index.html
+++ b/packages/dbgpt-app/src/dbgpt_app/static/web/mobile/chat/index.html
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/dbgpt-core/src/dbgpt/core/interface/output_parser.py b/packages/dbgpt-core/src/dbgpt/core/interface/output_parser.py
index b1f142e9c..0ccaa622f 100644
--- a/packages/dbgpt-core/src/dbgpt/core/interface/output_parser.py
+++ b/packages/dbgpt-core/src/dbgpt/core/interface/output_parser.py
@@ -233,6 +233,8 @@ class BaseOutputParser(MapOperator[ModelOutput, Any], ABC):
cleaned_output = (
cleaned_output.strip()
+ .replace("\\r\\n", " ")
+ .replace("\r\n", " ")
.replace("\\n", " ")
.replace("\n", " ")
.replace("\\", " ")
diff --git a/packages/dbgpt-core/src/dbgpt/model/adapter/base.py b/packages/dbgpt-core/src/dbgpt/model/adapter/base.py
index 414eabe1a..1a60204a6 100644
--- a/packages/dbgpt-core/src/dbgpt/model/adapter/base.py
+++ b/packages/dbgpt-core/src/dbgpt/model/adapter/base.py
@@ -270,7 +270,7 @@ class LLMModelAdapter(ABC):
or "reasoning" in lower_model_name_or_path
or "reasoner" in lower_model_name_or_path
)
- )
+ ) or (lower_model_name_or_path and "qwq" in lower_model_name_or_path)
def support_async(self) -> bool:
"""Whether the loaded model supports asynchronous calls"""
diff --git a/packages/dbgpt-core/src/dbgpt/rag/text_splitter/text_splitter.py b/packages/dbgpt-core/src/dbgpt/rag/text_splitter/text_splitter.py
index 3250f4477..81e2b830f 100644
--- a/packages/dbgpt-core/src/dbgpt/rag/text_splitter/text_splitter.py
+++ b/packages/dbgpt-core/src/dbgpt/rag/text_splitter/text_splitter.py
@@ -916,8 +916,9 @@ class PageTextSplitter(TextSplitter):
class RDBTextSplitter(TextSplitter):
"""Split relational database tables and fields."""
- def __init__(self, **kwargs):
+ def __init__(self, column_separator: str = "\n", **kwargs):
"""Create a new TextSplitter."""
+ self._column_separator = column_separator
super().__init__(**kwargs)
def split_text(self, text: str, **kwargs):
@@ -942,7 +943,7 @@ class RDBTextSplitter(TextSplitter):
field_metadata["part"] = "field" # identify of field_chunk
table_chunk = Chunk(content=table_part, metadata=table_metadata)
chunks.append(table_chunk)
- field_parts = field_part.split("\n")
+ field_parts = field_part.split(self._column_separator)
for i, sub_part in enumerate(field_parts):
sub_metadata = copy.deepcopy(field_metadata)
sub_metadata["part_index"] = i
diff --git a/packages/dbgpt-ext/src/dbgpt_ext/rag/assembler/db_schema.py b/packages/dbgpt-ext/src/dbgpt_ext/rag/assembler/db_schema.py
index 4233300bc..42b31ee9f 100644
--- a/packages/dbgpt-ext/src/dbgpt_ext/rag/assembler/db_schema.py
+++ b/packages/dbgpt-ext/src/dbgpt_ext/rag/assembler/db_schema.py
@@ -60,40 +60,12 @@ class DBSchemaAssembler(BaseAssembler):
self._connector = connector
self._table_vector_store_connector = table_vector_store_connector
self._field_vector_store_connector = field_vector_store_connector
- # field_vector_store_config = VectorStoreConfig(
- # name=table_vector_store_connector.vector_store_config.name + "_field"
- # )
- # self._field_vector_store_connector = (
- # field_vector_store_connector
- # or VectorStoreConnector.from_default(
- # os.getenv("VECTOR_STORE_TYPE", "Chroma"),
- # self._table_vector_store_connector.current_embeddings,
- # vector_store_config=field_vector_store_config,
- # )
- # )
-
self._embedding_model = embedding_model
if self._embedding_model and not embeddings:
embeddings = DefaultEmbeddingFactory(
default_model_name=self._embedding_model
).create(self._embedding_model)
- # if (
- # embeddings
- # and self._table_vector_store_connector.vector_store_config.embedding_fn
- # is None
- # ):
- # self._table_vector_store_connector.vector_store_config.embedding_fn = (
- # embeddings
- # )
- # if (
- # embeddings
- # and self._field_vector_store_connector.vector_store_config.embedding_fn
- # is None
- # ):
- # self._field_vector_store_connector.vector_store_config.embedding_fn = (
- # embeddings
- # )
knowledge = DatasourceKnowledge(connector, model_dimension=max_seq_length)
super().__init__(
knowledge=knowledge,
diff --git a/packages/dbgpt-ext/src/dbgpt_ext/rag/knowledge/datasource.py b/packages/dbgpt-ext/src/dbgpt_ext/rag/knowledge/datasource.py
index 1dbc83afd..201a600c6 100644
--- a/packages/dbgpt-ext/src/dbgpt_ext/rag/knowledge/datasource.py
+++ b/packages/dbgpt-ext/src/dbgpt_ext/rag/knowledge/datasource.py
@@ -11,7 +11,11 @@ from dbgpt.rag.knowledge.base import (
KnowledgeType,
)
-from ..summary.rdbms_db_summary import _parse_db_summary_with_metadata
+from ..summary.rdbms_db_summary import (
+ _DEFAULT_COLUMN_SEPARATOR,
+ _DEFAULT_SUMMARY_TEMPLATE,
+ _parse_db_summary_with_metadata,
+)
class DatasourceKnowledge(Knowledge):
@@ -20,8 +24,9 @@ class DatasourceKnowledge(Knowledge):
def __init__(
self,
connector: BaseConnector,
- summary_template: str = "table_name: {table_name}",
+ summary_template: str = _DEFAULT_SUMMARY_TEMPLATE,
separator: str = "--table-field-separator--",
+ column_separator: str = _DEFAULT_COLUMN_SEPARATOR,
knowledge_type: Optional[KnowledgeType] = KnowledgeType.DOCUMENT,
metadata: Optional[Dict[str, Union[str, List[str]]]] = None,
model_dimension: int = 512,
@@ -40,6 +45,7 @@ class DatasourceKnowledge(Knowledge):
model_dimension(int, optional): The threshold for splitting field string
"""
self._separator = separator
+ self._column_separator = column_separator
self._connector = connector
self._summary_template = summary_template
self._model_dimension = model_dimension
@@ -52,7 +58,8 @@ class DatasourceKnowledge(Knowledge):
self._connector,
self._summary_template,
self._separator,
- self._model_dimension,
+ column_separator=self._column_separator,
+ model_dimension=self._model_dimension,
)
for summary, table_metadata in db_summary_with_metadata:
metadata = {"source": "database"}
diff --git a/packages/dbgpt-ext/src/dbgpt_ext/rag/retriever/db_schema.py b/packages/dbgpt-ext/src/dbgpt_ext/rag/retriever/db_schema.py
index 1ccff6275..60258698e 100644
--- a/packages/dbgpt-ext/src/dbgpt_ext/rag/retriever/db_schema.py
+++ b/packages/dbgpt-ext/src/dbgpt_ext/rag/retriever/db_schema.py
@@ -13,7 +13,11 @@ from dbgpt.storage.vector_store.filters import MetadataFilter, MetadataFilters
from dbgpt.util.chat_util import run_tasks
from dbgpt.util.executor_utils import blocking_func_to_async_no_executor
-from ..summary.rdbms_db_summary import _parse_db_summary
+from ..summary.rdbms_db_summary import (
+ _DEFAULT_COLUMN_SEPARATOR,
+ _parse_db_summary,
+ _parse_table_detail,
+)
logger = logging.getLogger(__name__)
@@ -28,6 +32,7 @@ class DBSchemaRetriever(BaseRetriever):
table_vector_store_connector: VectorStoreBase,
field_vector_store_connector: VectorStoreBase = None,
separator: str = "--table-field-separator--",
+ column_separator: str = _DEFAULT_COLUMN_SEPARATOR,
top_k: int = 4,
connector: Optional[BaseConnector] = None,
query_rewrite: bool = False,
@@ -100,6 +105,7 @@ class DBSchemaRetriever(BaseRetriever):
print(f"db struct rag example results:{result}")
"""
self._separator = separator
+ self._column_separator = column_separator
self._top_k = top_k
self._connector = connector
self._query_rewrite = query_rewrite
@@ -186,9 +192,11 @@ class DBSchemaRetriever(BaseRetriever):
field_chunks = self._field_vector_store_connector.similar_search_with_scores(
query, self._top_k, 0, MetadataFilters(filters=filters)
)
- field_contents = [chunk.content for chunk in field_chunks]
- table_chunk.content += "\n" + self._separator + "\n" + "\n".join(field_contents)
- return table_chunk
+ field_contents = [chunk.content.strip() for chunk in field_chunks]
+ table_chunk.content += (
+ "\n" + self._separator + "\n" + self._column_separator.join(field_contents)
+ )
+ return self._deserialize_table_chunk(table_chunk)
def _similarity_search(
self, query, filters: Optional[MetadataFilters] = None
@@ -198,6 +206,7 @@ class DBSchemaRetriever(BaseRetriever):
query, self._top_k, 0, filters
)
+ # Find all table chunks which are not separated
not_sep_chunks = [
chunk for chunk in table_chunks if not chunk.metadata.get("separated")
]
@@ -205,9 +214,11 @@ class DBSchemaRetriever(BaseRetriever):
chunk for chunk in table_chunks if chunk.metadata.get("separated")
]
if not separated_chunks:
- return not_sep_chunks
+ return [self._deserialize_table_chunk(chunk) for chunk in not_sep_chunks]
# Create tasks list
+ # The fields of table is too large, and it has to be separated into chunks,
+ # so we need to retrieve fields of each table separately
tasks = [
lambda c=chunk: self._retrieve_field(c, query) for chunk in separated_chunks
]
@@ -216,3 +227,32 @@ class DBSchemaRetriever(BaseRetriever):
# Combine and return results
return not_sep_chunks + separated_result
+
+ def _deserialize_table_chunk(self, chunk: Chunk) -> Chunk:
+ """Deserialize table chunk."""
+ db_summary_version = chunk.metadata.get("db_summary_version")
+ if not db_summary_version:
+ return chunk
+ parts = chunk.content.split(self._separator)
+ table_part, field_part = parts[0].strip(), parts[1].strip()
+ table_detail = _parse_table_detail(table_part)
+ table_name = table_detail.get("table_name")
+ table_comment = table_detail.get("table_comment")
+ index_keys = table_detail.get("index_keys")
+
+ table_name = table_name.strip() if table_name else table_name
+ table_comment = table_comment.strip() if table_comment else table_comment
+ index_keys = index_keys.strip() if index_keys else index_keys
+ if not table_name:
+ return chunk
+
+ create_statement = f'CREATE TABLE "{table_name}"\r\n(\r\n '
+ create_statement += field_part
+ create_statement += "\r\n)"
+ if table_comment:
+ create_statement += f' COMMENT "{table_comment}"\r\n'
+ if index_keys:
+ create_statement += f"Index keys: {index_keys}"
+
+ chunk.content = create_statement
+ return chunk
diff --git a/packages/dbgpt-ext/src/dbgpt_ext/rag/summary/rdbms_db_summary.py b/packages/dbgpt-ext/src/dbgpt_ext/rag/summary/rdbms_db_summary.py
index dba7f827e..d65a4aef7 100644
--- a/packages/dbgpt-ext/src/dbgpt_ext/rag/summary/rdbms_db_summary.py
+++ b/packages/dbgpt-ext/src/dbgpt_ext/rag/summary/rdbms_db_summary.py
@@ -13,6 +13,35 @@ if TYPE_CHECKING:
CFG = Config()
+_DEFAULT_SUMMARY_TEMPLATE = """\
+table_name: {table_name}\r\n\
+table_comment: {table_comment}\r\n\
+index_keys: {index_keys}\r\n\
+"""
+_DEFAULT_SUMMARY_TEMPLATE_PATTEN = (
+ r"table_name:\s*(?P.*)\s*"
+ r"table_comment:\s*(?P.*)\s*"
+ r"index_keys:\s*(?P.*)\s*"
+)
+_DEFAULT_COLUMN_SEPARATOR = ",\r\n "
+
+
+def _parse_table_detail(table_desc_str: str) -> Dict[str, Any]:
+ """Parse table detail string.
+
+ Args:
+ table_desc_str (str): table detail string
+
+ Returns:
+ Dict[str, Any]: A dictionary containing table_name, table_comment, and
+ index_keys.
+ """
+ matched = re.match(_DEFAULT_SUMMARY_TEMPLATE_PATTEN, table_desc_str)
+ if matched:
+ return matched.groupdict()
+ return {}
+
+
class RdbmsSummary(DBSummary):
"""Get rdbms db table summary template.
@@ -83,8 +112,9 @@ def _parse_db_summary(
def _parse_db_summary_with_metadata(
conn: BaseConnector,
- summary_template: str = "table_name: {table_name}",
+ summary_template: str = _DEFAULT_SUMMARY_TEMPLATE,
separator: str = "--table-field-separator--",
+ column_separator: str = _DEFAULT_COLUMN_SEPARATOR,
model_dimension: int = 512,
) -> List[Tuple[str, Dict[str, Any]]]:
"""Get db summary for database.
@@ -99,14 +129,21 @@ def _parse_db_summary_with_metadata(
tables = conn.get_table_names()
table_info_summaries = [
_parse_table_summary_with_metadata(
- conn, summary_template, separator, table_name, model_dimension
+ conn,
+ summary_template,
+ separator,
+ table_name,
+ model_dimension,
+ column_separator=column_separator,
)
for table_name in tables
]
return table_info_summaries
-def _split_columns_str(columns: List[str], model_dimension: int):
+def _split_columns_str(
+ columns: List[str], model_dimension: int, column_separator: str = ",\r\n "
+):
"""Split columns str.
Args:
@@ -129,7 +166,7 @@ def _split_columns_str(columns: List[str], model_dimension: int):
else:
# If current string is empty, add element directly
if current_string:
- current_string += "," + element_str
+ current_string += column_separator + element_str
else:
current_string = element_str
current_length += element_length + 1 # Add length of space
@@ -147,6 +184,8 @@ def _parse_table_summary_with_metadata(
separator,
table_name: str,
model_dimension=512,
+ column_separator: str = _DEFAULT_COLUMN_SEPARATOR,
+ db_summary_version: str = "v1.0",
) -> Tuple[str, Dict[str, Any]]:
"""Get table summary for table.
@@ -168,17 +207,26 @@ def _parse_table_summary_with_metadata(
(column4,comment), (column5, comment), (column6, comment)
"""
columns = []
- metadata = {"table_name": table_name, "separated": 0}
+ metadata = {
+ "table_name": table_name,
+ "separated": 0,
+ "db_summary_version": db_summary_version,
+ }
for column in conn.get_columns(table_name):
- if column.get("comment"):
- columns.append(f"{column['name']} ({column.get('comment')})")
- else:
- columns.append(f"{column['name']}")
+ col_name = column["name"]
+ col_type = str(column["type"]) if "type" in column else None
+ col_comment = column.get("comment")
+ column_def = f'"{col_name}" {col_type.upper()}'
+ if col_comment:
+ column_def += f' COMMENT "{col_comment}"'
+ columns.append(column_def)
metadata.update({"field_num": len(columns)})
- separated_columns = _split_columns_str(columns, model_dimension=model_dimension)
+ separated_columns = _split_columns_str(
+ columns, model_dimension=model_dimension, column_separator=column_separator
+ )
if len(separated_columns) > 1:
metadata["separated"] = 1
- column_str = "\n".join(separated_columns)
+ column_str = column_separator.join(separated_columns)
# Obtain index information
index_keys = []
raw_indexes = conn.get_indexes(table_name)
@@ -193,18 +241,19 @@ def _parse_table_summary_with_metadata(
else:
key_str = ", ".join(index["column_names"])
index_keys.append(f"{index['name']}(`{key_str}`) ")
- table_str = summary_template.format(table_name=table_name)
+
+ table_comment = ""
try:
comment = conn.get_table_comment(table_name)
+ table_comment = comment.get("text")
except Exception:
- comment = dict(text=None)
- if comment.get("text"):
- table_str += f"\ntable_comment: {comment.get('text')}"
+ pass
- if len(index_keys) > 0:
- index_key_str = ", ".join(index_keys)
- table_str += f"\nindex_keys: {index_key_str}"
+ index_key_str = ", ".join(index_keys)
+ table_str = summary_template.format(
+ table_name=table_name, table_comment=table_comment, index_keys=index_key_str
+ )
table_str += f"\n{separator}\n{column_str}"
return table_str, metadata
diff --git a/packages/dbgpt-serve/src/dbgpt_serve/datasource/service/db_summary_client.py b/packages/dbgpt-serve/src/dbgpt_serve/datasource/service/db_summary_client.py
index 698e9d43a..4a9395b49 100644
--- a/packages/dbgpt-serve/src/dbgpt_serve/datasource/service/db_summary_client.py
+++ b/packages/dbgpt-serve/src/dbgpt_serve/datasource/service/db_summary_client.py
@@ -106,9 +106,13 @@ class DBSummaryClient:
)
if not table_vector_connector.vector_name_exists():
from dbgpt_ext.rag.assembler.db_schema import DBSchemaAssembler
+ from dbgpt_ext.rag.summary.rdbms_db_summary import _DEFAULT_COLUMN_SEPARATOR
chunk_parameters = ChunkParameters(
- text_splitter=RDBTextSplitter(separator="--table-field-separator--")
+ text_splitter=RDBTextSplitter(
+ column_separator=_DEFAULT_COLUMN_SEPARATOR,
+ separator="--table-field-separator--",
+ )
)
db_assembler = DBSchemaAssembler.load_from_connection(
connector=db_summary_client.db,
diff --git a/packages/dbgpt-serve/src/dbgpt_serve/rag/connector.py b/packages/dbgpt-serve/src/dbgpt_serve/rag/connector.py
index 28f42b202..3f4b46711 100644
--- a/packages/dbgpt-serve/src/dbgpt_serve/rag/connector.py
+++ b/packages/dbgpt-serve/src/dbgpt_serve/rag/connector.py
@@ -59,7 +59,7 @@ class VectorStoreConnector:
self.app_config = self._system_app.config.configs.get("app_config")
self._register()
- vector_store_type = self.__rewrite_index_store_type(vector_store_type)
+ vector_store_type = self._rewrite_index_store_type(vector_store_type)
if self._match(vector_store_type):
self.connector_class, self.config_class = connector[vector_store_type]
else:
@@ -94,11 +94,16 @@ class VectorStoreConnector:
logger.error("connect vector store failed: %s", e)
raise e
- def __rewrite_index_store_type(self, index_store_type):
+ def _rewrite_index_store_type(self, index_store_type):
# Rewrite Knowledge Graph Type
- if self.app_config.rag.storage.graph.get("enable_summary").lower() == "true":
- if index_store_type == "KnowledgeGraph":
- return "CommunitySummaryKnowledgeGraph"
+ if self.app_config.rag.storage.graph:
+ graph_dict = self.app_config.rag.storage.graph
+ if (
+ isinstance(graph_dict, dict)
+ and graph_dict.get("enable_summary", "false").lower() == "true"
+ ):
+ if index_store_type == "KnowledgeGraph":
+ return "CommunitySummaryKnowledgeGraph"
return index_store_type
@classmethod
diff --git a/web/components/chat/chat-container.tsx b/web/components/chat/chat-container.tsx
index 3a21819f7..744afb02f 100644
--- a/web/components/chat/chat-container.tsx
+++ b/web/components/chat/chat-container.tsx
@@ -13,6 +13,76 @@ import MuiLoading from '../common/loading';
import Completion from './completion';
import Header from './header';
+// Function to extract JSON from vis-thinking code blocks
+const parseVisThinking = (content: any) => {
+ // Check if content is a string
+ if (typeof content !== 'string') {
+ return content;
+ }
+
+ // Check if this is a vis-thinking code block
+ if (content.startsWith('```vis-thinking') || content.includes('```vis-thinking')) {
+ // Find where the JSON part begins
+ // We're looking for the first occurrence of '{"' after the vis-thinking header
+ const jsonStartIndex = content.indexOf('{"');
+
+ if (jsonStartIndex !== -1) {
+ // Extract everything from the JSON start to the end
+ const jsonContent = content.substring(jsonStartIndex);
+
+ // Attempt to parse the JSON
+ try {
+ return JSON.parse(jsonContent);
+ } catch {
+ // If there's a parsing error, try to clean up the JSON string
+ // This might happen if there are backticks at the end
+ const cleanedContent = jsonContent.replace(/```$/g, '').trim();
+ try {
+ return JSON.parse(cleanedContent);
+ } catch (e2) {
+ console.error('Error parsing cleaned JSON:', e2);
+ return null;
+ }
+ }
+ }
+ }
+
+ // If it's not a vis-thinking block, try to parse it directly as JSON
+ try {
+ return typeof content === 'string' ? JSON.parse(content) : content;
+ } catch {
+ // If it's not valid JSON, return the original content
+ console.log('Not JSON format or vis-thinking format, returning original content');
+ return content;
+ }
+};
+
+// Function to extract the thinking part from vis-thinking code blocks while preserving tags
+const formatToVisThinking = (content: any) => {
+ // Only process strings
+ if (typeof content !== 'string') {
+ return content;
+ }
+
+ // Check if this is a vis-thinking code block
+ if (content.startsWith('```vis-thinking') || content.includes('```vis-thinking')) {
+ // Find the start of the vis-thinking block
+ const blockStartIndex = content.indexOf('```vis-thinking');
+ const thinkingStartIndex = blockStartIndex + '```vis-thinking'.length;
+
+ // Find the end of the vis-thinking block
+ const thinkingEndIndex = content.indexOf('```', thinkingStartIndex);
+
+ if (thinkingEndIndex !== -1) {
+ // Extract the thinking content with the tags
+ return content.substring(blockStartIndex, thinkingEndIndex + 3);
+ }
+ }
+
+ // If it's not a vis-thinking block or can't extract thinking part, return the original content
+ return content;
+};
+
const ChatContainer = () => {
const searchParams = useSearchParams();
const { scene, chatId, model, agent, setModel, history, setHistory } = useContext(ChatContext);
@@ -33,7 +103,17 @@ const ChatContainer = () => {
const contextTemp = list[list.length - 1]?.context;
if (contextTemp) {
try {
- const contextObj = typeof contextTemp === 'string' ? JSON.parse(contextTemp) : contextTemp;
+ // First, parse the context to handle vis-thinking code blocks
+ const parsedContext = parseVisThinking(contextTemp);
+
+ // Then, handle the normal JSON processing
+ const contextObj =
+ typeof parsedContext === 'object'
+ ? parsedContext
+ : typeof contextTemp === 'string'
+ ? JSON.parse(contextTemp)
+ : contextTemp;
+
setChartsData(contextObj?.template_name === 'report' ? contextObj?.charts : undefined);
} catch (e) {
console.log(e);
@@ -127,7 +207,11 @@ const ChatContainer = () => {
'h-full lg:px-8': scene !== 'chat_dashboard',
})}
>
-
+
>
diff --git a/web/components/chat/completion.tsx b/web/components/chat/completion.tsx
index efca8c35b..290ebcd45 100644
--- a/web/components/chat/completion.tsx
+++ b/web/components/chat/completion.tsx
@@ -25,9 +25,10 @@ import MonacoEditor from './monaco-editor';
type Props = {
messages: IChatDialogueMessageSchema[];
onSubmit: (message: string, otherQueryBody?: Record) => Promise;
+ onFormatContent?: (content: any) => any; // Callback for extracting thinking part
};
-const Completion = ({ messages, onSubmit }: Props) => {
+const Completion = ({ messages, onSubmit, onFormatContent }: Props) => {
const { dbParam, currentDialogue, scene, model, refreshDialogList, chatId, agent, docId } = useContext(ChatContext);
const { t } = useTranslation();
const searchParams = useSearchParams();
@@ -78,18 +79,23 @@ const Completion = ({ messages, onSubmit }: Props) => {
}
};
- const handleJson2Obj = (jsonStr: string) => {
- try {
- return JSON.parse(jsonStr);
- } catch {
- return jsonStr;
+ // Process message content - if onFormatContent is provided and this is a dashboard chat,
+ // we'll extract the thinking part from vis-thinking code blocks
+ const processMessageContent = (content: any) => {
+ if (isChartChat && onFormatContent && typeof content === 'string') {
+ return onFormatContent(content);
}
+ return content;
};
const [messageApi, contextHolder] = message.useMessage();
const onCopyContext = async (context: any) => {
- const pureStr = context?.replace(/\trelations:.*/g, '');
+ // If we have a formatting function and this is a string, apply it before copying
+ const contentToCopy =
+ isChartChat && onFormatContent && typeof context === 'string' ? onFormatContent(context) : context;
+
+ const pureStr = contentToCopy?.replace(/\trelations:.*/g, '');
const result = copy(pureStr);
if (result) {
if (pureStr) {
@@ -124,14 +130,25 @@ const Completion = ({ messages, onSubmit }: Props) => {
let tempMessage: IChatDialogueMessageSchema[] = messages;
if (isChartChat) {
tempMessage = cloneDeep(messages).map(item => {
- if (item?.role === 'view' && typeof item?.context === 'string') {
- item.context = handleJson2Obj(item?.context);
+ if (item?.role === 'view') {
+ if (typeof item?.context === 'string') {
+ // Try to parse JSON first
+ try {
+ item.context = JSON.parse(item.context);
+ } catch {
+ // If JSON parsing fails and we have a formatting function,
+ // it might be a vis-thinking block, so process it
+ if (onFormatContent) {
+ item.context = processMessageContent(item.context);
+ }
+ }
+ }
}
return item;
});
}
setShowMessages(tempMessage.filter(item => ['view', 'human'].includes(item.role)));
- }, [isChartChat, messages]);
+ }, [isChartChat, messages, onFormatContent]);
useEffect(() => {
apiInterceptors(getChatFeedBackSelect())