feat(ChatData): ChatData Strean response

1.ChatData Stream response
This commit is contained in:
yhjun1026 2023-10-26 10:19:20 +08:00
parent afb5fd1445
commit 1c5ed2808b
51 changed files with 263 additions and 159 deletions

View File

@ -267,8 +267,12 @@ class ApiCall:
all_context = self.__deal_error_md_tags(
all_context, api_context
)
# all_context = all_context.replace(
# api_context, api_status.api_result
# )
all_context = all_context.replace(
api_context, api_status.api_result
api_context, self.to_view_antv_vis(api_status)
)
else:
if api_status.status == Status.FAILED.value:
@ -335,6 +339,7 @@ class ApiCall:
else:
api_status.location.append(api_index)
def __to_view_param_str(self, api_status):
param = {}
if api_status.name:
@ -356,6 +361,27 @@ class ApiCall:
result = ET.tostring(api_call_element, encoding="utf-8")
return result.decode("utf-8")
def to_view_antv_vis(self, api_status: PluginStatus):
api_call_element = ET.Element("chart-view")
api_call_element.text = self.__to_antv_vis_param(api_status)
result = ET.tostring(api_call_element, encoding="utf-8")
return result.decode("utf-8")
def __to_antv_vis_param(self, api_status: PluginStatus):
param = {}
if api_status.name:
param["type"] = api_status.name
if api_status.args:
param["sql"] = api_status.args["sql"]
if api_status.err_msg:
param["err_msg"] = api_status.err_msg
if api_status.api_result:
param["data"] = api_status.api_result
return json.dumps(param)
def run(self, llm_text):
if self.__is_need_wait_plugin_call(llm_text):
# wait api call generate complete
@ -406,3 +432,38 @@ class ApiCall:
value.err_msg = str(e)
value.end_time = datetime.now().timestamp() * 1000
return self.api_view_context(llm_text, True)
def display_sql_llmvis(self, llm_text, sql_run_func):
"""
Render charts using the Antv standard protocol
Args:
llm_text: LLM response text
sql_run_func: sql run function
Returns:
ChartView protocol text
"""
if self.__is_need_wait_plugin_call(llm_text):
# wait api call generate complete
if self.check_last_plugin_call_ready(llm_text):
self.update_from_context(llm_text)
for key, value in self.plugin_status_map.items():
if value.status == Status.TODO.value:
value.status = Status.RUNNING.value
logging.info(f"sql展示执行:{value.name},{value.args}")
try:
sql = value.args["sql"]
if sql is not None and len(sql) > 0:
data_df = sql_run_func(sql)
value.api_result = data_df.apply(lambda row: row.to_dict(), axis=1).to_list()
value.status = Status.COMPLETED.value
else:
value.status = Status.FAILED.value
value.err_msg = "No executable sql"
except Exception as e:
value.status = Status.FAILED.value
value.err_msg = str(e)
value.end_time = datetime.now().timestamp() * 1000
return self.api_view_context(llm_text, True)

View File

@ -22,7 +22,7 @@ class ChatExcel(BaseChat):
"""a Excel analyzer to analyze Excel Data"""
chat_scene: str = ChatScene.ChatExcel.value()
chat_retention_rounds = 1
chat_retention_rounds = 2
def __init__(self, chat_param: Dict):
"""Chat Excel Module Initialization
@ -88,4 +88,4 @@ class ChatExcel(BaseChat):
def stream_plugin_call(self, text):
text = text.replace("\n", " ")
return self.api_call.run_display_sql(text, self.excel_reader.get_df_by_sql_ex)
return self.api_call.display_sql_llmvis(text, self.excel_reader.get_df_by_sql_ex)

View File

@ -33,11 +33,18 @@ _DEFAULT_TEMPLATE_ZH = """
{response}
"""
RESPONSE_FORMAT_SIMPLE = {
_RESPONSE_FORMAT_SIMPLE_ZH = {
"DataAnalysis": "数据内容分析总结",
"ColumnAnalysis": [{"column name1": "字段1介绍专业术语解释(请尽量简单明了)"}],
"AnalysisProgram": ["1.分析方案1图表展示方式1", "2.分析方案2图表展示方式2"],
}
_RESPONSE_FORMAT_SIMPLE_EN = {
"DataAnalysis": "Data content analysis summary",
"ColumnAnalysis": [{"column name1": "Introduction to Column 1 and explanation of professional terms (please try to be as simple and clear as possible)"}],
"AnalysisProgram": ["1. Analysis plan 1, chart display type 1", "2. Analysis plan 2, chart display type 2"],
}
RESPONSE_FORMAT_SIMPLE =(_RESPONSE_FORMAT_SIMPLE_EN if CFG.LANGUAGE == "en" else _RESPONSE_FORMAT_SIMPLE_ZH)
_DEFAULT_TEMPLATE = (

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[670],{80882:function(e,t,r){"use strict";r.d(t,{Z:function(){return i}});var n=r(87462),l=r(67294),o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}}]},name:"down",theme:"outlined"},a=r(84089),i=l.forwardRef(function(e,t){return l.createElement(a.Z,(0,n.Z)({},e,{ref:t,icon:o}))})},54068:function(e,t,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/knowledge/[knowledgeName]/[id]",function(){return r(21543)}])},21543:function(e,t,r){"use strict";r.r(t),r.d(t,{default:function(){return X}});var n=r(85893),l=r(67294),o=r(11163),a=r(94184),i=r.n(a),s=r(50344),c=r(64217),u=r(96159),p=r(53124),m=r(80882),d=r(1142);let f=e=>{let{children:t}=e,{getPrefixCls:r}=l.useContext(p.E_),n=r("breadcrumb");return l.createElement("li",{className:`${n}-separator`,"aria-hidden":"true"},""===t?t:t||"/")};f.__ANT_BREADCRUMB_SEPARATOR=!0;var b=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);l<n.length;l++)0>t.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};function g(e,t,r,n){if(null==r)return null;let{className:o,onClick:a}=t,s=b(t,["className","onClick"]),u=Object.assign(Object.assign({},(0,c.Z)(s,{data:!0,aria:!0})),{onClick:a});return void 0!==n?l.createElement("a",Object.assign({},u,{className:i()(`${e}-link`,o),href:n}),r):l.createElement("span",Object.assign({},u,{className:i()(`${e}-link`,o)}),r)}var O=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);l<n.length;l++)0>t.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let y=e=>{let{prefixCls:t,separator:r="/",children:n,menu:o,overlay:a,dropdownProps:i,href:s}=e,c=(e=>{if(o||a){let r=Object.assign({},i);if(o){let e=o||{},{items:t}=e,n=O(e,["items"]);r.menu=Object.assign(Object.assign({},n),{items:null==t?void 0:t.map((e,t)=>{var{key:r,title:n,label:o,path:a}=e,i=O(e,["key","title","label","path"]);let c=null!=o?o:n;return a&&(c=l.createElement("a",{href:`${s}${a}`},c)),Object.assign(Object.assign({},i),{key:null!=r?r:t,label:c})})})}else a&&(r.overlay=a);return l.createElement(d.Z,Object.assign({placement:"bottom"},r),l.createElement("span",{className:`${t}-overlay-link`},e,l.createElement(m.Z,null)))}return e})(n);return null!=c?l.createElement(l.Fragment,null,l.createElement("li",null,c),r&&l.createElement(f,null,r)):null},h=e=>{let{prefixCls:t,children:r,href:n}=e,o=O(e,["prefixCls","children","href"]),{getPrefixCls:a}=l.useContext(p.E_),i=a("breadcrumb",t);return l.createElement(y,Object.assign({},o,{prefixCls:i}),g(i,o,r,n))};h.__ANT_BREADCRUMB_ITEM=!0;var v=r(14747),j=r(67968),x=r(45503);let E=e=>{let{componentCls:t,iconCls:r}=e;return{[t]:Object.assign(Object.assign({},(0,v.Wf)(e)),{color:e.itemColor,fontSize:e.fontSize,[r]:{fontSize:e.iconFontSize},ol:{display:"flex",flexWrap:"wrap",margin:0,padding:0,listStyle:"none"},a:Object.assign({color:e.linkColor,transition:`color ${e.motionDurationMid}`,padding:`0 ${e.paddingXXS}px`,borderRadius:e.borderRadiusSM,height:e.lineHeight*e.fontSize,display:"inline-block",marginInline:-e.marginXXS,"&:hover":{color:e.linkHoverColor,backgroundColor:e.colorBgTextHover}},(0,v.Qy)(e)),"li:last-child":{color:e.lastItemColor},[`${t}-separator`]:{marginInline:e.separatorMargin,color:e.separatorColor},[`${t}-link`]:{[`
> ${r} + span,
> ${r} + a
`]:{marginInlineStart:e.marginXXS}},[`${t}-overlay-link`]:{borderRadius:e.borderRadiusSM,height:e.lineHeight*e.fontSize,display:"inline-block",padding:`0 ${e.paddingXXS}px`,marginInline:-e.marginXXS,[`> ${r}`]:{marginInlineStart:e.marginXXS,fontSize:e.fontSizeIcon},"&:hover":{color:e.linkHoverColor,backgroundColor:e.colorBgTextHover,a:{color:e.linkHoverColor}},a:{"&:hover":{backgroundColor:"transparent"}}},[`&${e.componentCls}-rtl`]:{direction:"rtl"}})}};var S=(0,j.Z)("Breadcrumb",e=>{let t=(0,x.TS)(e,{});return[E(t)]},e=>({itemColor:e.colorTextDescription,lastItemColor:e.colorText,iconFontSize:e.fontSize,linkColor:e.colorTextDescription,linkHoverColor:e.colorText,separatorColor:e.colorTextDescription,separatorMargin:e.marginXS})),k=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);l<n.length;l++)0>t.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};function C(e){let{breadcrumbName:t,children:r}=e,n=k(e,["breadcrumbName","children"]),l=Object.assign({title:t},n);return r&&(l.menu={items:r.map(e=>{var{breadcrumbName:t}=e;return Object.assign(Object.assign({},k(e,["breadcrumbName"])),{title:t})})}),l}var _=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);l<n.length;l++)0>t.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let w=(e,t)=>{if(void 0===t)return t;let r=(t||"").replace(/^\//,"");return Object.keys(e).forEach(t=>{r=r.replace(`:${t}`,e[t])}),r},N=e=>{let t;let{prefixCls:r,separator:n="/",style:o,className:a,rootClassName:m,routes:d,items:b,children:O,itemRender:h,params:v={}}=e,j=_(e,["prefixCls","separator","style","className","rootClassName","routes","items","children","itemRender","params"]),{getPrefixCls:x,direction:E,breadcrumb:k}=l.useContext(p.E_),N=x("breadcrumb",r),[$,P]=S(N),T=(0,l.useMemo)(()=>b||(d?d.map(C):null),[b,d]),R=(e,t,r,n,l)=>{if(h)return h(e,t,r,n);let o=function(e,t){if(void 0===e.title||null===e.title)return null;let r=Object.keys(t).join("|");return"object"==typeof e.title?e.title:String(e.title).replace(RegExp(`:(${r})`,"g"),(e,r)=>t[r]||e)}(e,t);return g(N,e,o,l)};if(T&&T.length>0){let e=[],r=b||d;t=T.map((t,o)=>{let{path:a,key:i,type:s,menu:u,overlay:p,onClick:m,className:d,separator:b,dropdownProps:g}=t,O=w(v,a);void 0!==O&&e.push(O);let h=null!=i?i:o;if("separator"===s)return l.createElement(f,{key:h},b);let j={},x=o===T.length-1;u?j.menu=u:p&&(j.overlay=p);let{href:E}=t;return e.length&&void 0!==O&&(E=`#/${e.join("/")}`),l.createElement(y,Object.assign({key:h},j,(0,c.Z)(t,{data:!0,aria:!0}),{className:d,dropdownProps:g,href:E,separator:x?"":n,onClick:m,prefixCls:N}),R(t,v,r,e,E))})}else if(O){let e=(0,s.Z)(O).length;t=(0,s.Z)(O).map((t,r)=>t?(0,u.Tm)(t,{separator:r===e-1?"":n,key:r}):t)}let I=i()(N,null==k?void 0:k.className,{[`${N}-rtl`]:"rtl"===E},a,m,P),X=Object.assign(Object.assign({},null==k?void 0:k.style),o);return $(l.createElement("nav",Object.assign({className:I,style:X},j),l.createElement("ol",null,t)))};N.Item=h,N.Separator=f;var $=r(85813),P=r(32983),T=r(67421),R=r(50489),I=r(92039),X=function(){let e=(0,o.useRouter)(),{t}=(0,T.$G)(),[r,a]=(0,l.useState)([]),{query:{id:i,knowledgeName:s}}=(0,o.useRouter)(),c=async()=>{let[e,t]=await (0,R.Vx)((0,R.gV)(s,{document_id:i,page:1,page_size:20}));a(null==t?void 0:t.data)};return(0,l.useEffect)(()=>{s&&i&&c()},[i,s]),(0,n.jsxs)("div",{className:"h-full overflow-y-scroll",children:[(0,n.jsx)(N,{className:"m-6",items:[{title:"Knowledge",onClick(){e.back()},path:"/knowledge"},{title:s}]}),(null==r?void 0:r.length)>0?null==r?void 0:r.map(e=>(0,n.jsxs)($.Z,{title:(0,n.jsxs)(n.Fragment,{children:[(0,I._)(e.doc_type),(0,n.jsx)("span",{children:e.doc_name})]}),children:[(0,n.jsxs)("p",{className:"font-semibold",children:[t("Content"),":"]}),(0,n.jsx)("p",{children:null==e?void 0:e.content}),(0,n.jsxs)("p",{className:"font-semibold",children:[t("Meta_Data"),": "]}),(0,n.jsx)("p",{children:null==e?void 0:e.meta_info})]},e.id)):(0,n.jsx)(P.Z,{image:P.Z.PRESENTED_IMAGE_DEFAULT})]})}}},function(e){e.O(0,[885,44,479,365,442,813,924,104,747,774,888,179],function(){return e(e.s=54068)}),_N_E=e.O()}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(s,c,a,e,t,d,n,b,i,k,f,h,u,j,g){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":[k,s,c,a,d,f,"static/chunks/539-dcd22f1f6b99ebee.js","static/chunks/pages/index-02331aee6ba6a7fc.js"],"/_error":["static/chunks/pages/_error-dee72aff9b2e2c12.js"],"/agent":[s,c,n,e,t,b,"static/chunks/pages/agent-dbb8ff019a2c71c2.js"],"/chat":["static/chunks/pages/chat-197b88d512cc5b14.js"],"/chat/[scene]/[id]":["static/chunks/pages/chat/[scene]/[id]-ac949685f9639f4f.js"],"/database":[s,c,a,e,t,d,h,"static/chunks/643-d2492f894de95084.js","static/chunks/pages/database-ee0ff45d60094b3c.js"],"/knowledge":[i,s,c,n,e,t,b,d,u,j,"static/chunks/pages/knowledge-fe88b529e40b0db6.js"],"/knowledge/[knowledgeName]/[id]":[i,s,c,n,e,t,b,u,j,"static/chunks/pages/knowledge/[knowledgeName]/[id]-288d3a43e60ca611.js"],"/models":[i,s,c,a,g,h,"static/chunks/pages/models-58b1d88132bdc672.js"],"/prompt":[k,s,c,a,g,f,"static/chunks/45-9ff739c09925ea35.js","static/chunks/61-d2f6cba798a49339.js","static/chunks/367-5b7ab3e8e2777607.js","static/chunks/pages/prompt-741cf72801523b25.js"],sortedPages:["/","/_app","/_error","/agent","/chat","/chat/[scene]/[id]","/database","/knowledge","/knowledge/[knowledgeName]/[id]","/models","/prompt"]}}("static/chunks/44-941ba89e47567ba3.js","static/chunks/479-68b22ee2b7a47fb3.js","static/chunks/9-bb2c54d5c06ba4bf.js","static/chunks/442-197e6cbc1e54109a.js","static/chunks/813-cce9482e33f2430c.js","static/chunks/411-d9eba2657c72f766.js","static/chunks/365-2cad3676ccbb1b1a.js","static/chunks/924-ba8e16df4d61ff5c.js","static/chunks/75fc9c18-36ac6f5a83376cd3.js","static/chunks/29107295-90b90cb30c825230.js","static/chunks/270-2f094a936d056513.js","static/chunks/928-74244889bd7f2699.js","static/chunks/104-953a3907bb8d7bfd.js","static/chunks/747-ec60adab93bb6758.js","static/chunks/815-fa0a8da2d0a72116.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@ -0,0 +1 @@
self.__BUILD_MANIFEST=function(s,c,a,e,t,n,b,d,k,h,i,u){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":[b,s,c,a,n,d,"static/chunks/539-dcd22f1f6b99ebee.js","static/chunks/pages/index-195d2b50dab810dd.js"],"/_error":["static/chunks/pages/_error-dee72aff9b2e2c12.js"],"/agent":[s,c,e,k,t,"static/chunks/pages/agent-25358689f05784e9.js"],"/chat":["static/chunks/pages/chat-4b4742a8b97ead61.js"],"/chat/[scene]/[id]":["static/chunks/pages/chat/[scene]/[id]-c4ba90e8044f953b.js"],"/database":[s,c,a,e,t,n,h,"static/chunks/643-d8f53f40dd3c5b40.js","static/chunks/pages/database-ed7e37a49de751e1.js"],"/knowledge":[i,s,c,e,k,t,n,"static/chunks/63-d9f1013be8e4599a.js","static/chunks/pages/knowledge-c73b240310994685.js"],"/knowledge/chunk":[e,t,"static/chunks/pages/knowledge/chunk-e27c2e349b868b28.js"],"/models":[i,s,c,a,u,h,"static/chunks/pages/models-fab5e316babfc6de.js"],"/prompt":[b,s,c,a,u,d,"static/chunks/45-9ff739c09925ea35.js","static/chunks/61-d2f6cba798a49339.js","static/chunks/367-2a6e805cba0c79d3.js","static/chunks/pages/prompt-f7fa6931310ae8ba.js"],sortedPages:["/","/_app","/_error","/agent","/chat","/chat/[scene]/[id]","/database","/knowledge","/knowledge/chunk","/models","/prompt"]}}("static/chunks/44-941ba89e47567ba3.js","static/chunks/479-68b22ee2b7a47fb3.js","static/chunks/9-bb2c54d5c06ba4bf.js","static/chunks/442-197e6cbc1e54109a.js","static/chunks/813-cce9482e33f2430c.js","static/chunks/411-d9eba2657c72f766.js","static/chunks/29107295-90b90cb30c825230.js","static/chunks/719-5a18c3c696beda6f.js","static/chunks/365-2cad3676ccbb1b1a.js","static/chunks/928-74244889bd7f2699.js","static/chunks/75fc9c18-a784766a129ec5fb.js","static/chunks/815-fa0a8da2d0a72116.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long