From ea363a43ade39280696db3dfcf72ddc33cf29447 Mon Sep 17 00:00:00 2001 From: yhjun1026 <460342015@qq.com> Date: Fri, 17 Nov 2023 15:59:35 +0800 Subject: [PATCH] feat(ChatDB): ChatDB Use fintune model 1.Compatible with community pure sql output model --- .../agent/commands/command_mange.py | 60 +++++++++++-------- pilot/out_parser/base.py | 1 + pilot/scene/base_chat.py | 6 ++ pilot/scene/chat_agent/chat.py | 2 +- pilot/scene/chat_agent/prompt.py | 3 +- .../chat_excel/excel_analyze/chat.py | 2 +- .../chat_excel/excel_analyze/prompt.py | 8 +-- .../chat_excel/excel_learning/chat.py | 12 ++++ .../chat_excel/excel_learning/out_parser.py | 55 ++++++++--------- .../chat_excel/excel_learning/prompt.py | 11 ++-- pilot/server/static/404.html | 2 +- pilot/server/static/404/index.html | 2 +- .../_buildManifest.js | 2 +- .../_ssgManifest.js | 0 ...0e0ef913c0.js => _app-5048853e4f571e60.js} | 0 ...9e2d6bb59.js => index-b1c8f59fe7e5d7df.js} | 0 ...b3f386d.js => webpack-6db517c886de77b1.js} | 0 pilot/server/static/agent/index.html | 2 +- .../static/chat/[scene]/[id]/index.html | 2 +- pilot/server/static/chat/index.html | 2 +- pilot/server/static/database/index.html | 2 +- pilot/server/static/index.html | 2 +- .../server/static/knowledge/chunk/index.html | 2 +- pilot/server/static/knowledge/index.html | 2 +- pilot/server/static/models/index.html | 2 +- pilot/server/static/prompt/index.html | 2 +- 26 files changed, 106 insertions(+), 78 deletions(-) rename pilot/server/static/_next/static/{j9lfvm6UVgUuLg2BMjk1w => 8DLUDtzfrUUv_4HYlGW9p}/_buildManifest.js (67%) rename pilot/server/static/_next/static/{j9lfvm6UVgUuLg2BMjk1w => 8DLUDtzfrUUv_4HYlGW9p}/_ssgManifest.js (100%) rename pilot/server/static/_next/static/chunks/pages/{_app-120ec20e0ef913c0.js => _app-5048853e4f571e60.js} (100%) rename pilot/server/static/_next/static/chunks/pages/{index-e5fd29b9e2d6bb59.js => index-b1c8f59fe7e5d7df.js} (100%) rename pilot/server/static/_next/static/chunks/{webpack-1af2ff4dbb3f386d.js => webpack-6db517c886de77b1.js} (100%) diff --git a/pilot/base_modules/agent/commands/command_mange.py b/pilot/base_modules/agent/commands/command_mange.py index 16c2a5463..7fd741d92 100644 --- a/pilot/base_modules/agent/commands/command_mange.py +++ b/pilot/base_modules/agent/commands/command_mange.py @@ -242,7 +242,7 @@ class ApiCall: return False def __deal_error_md_tags(self, all_context, api_context, include_end: bool = True): - error_md_tags = ["```", "```python", "```xml", "```json", "```markdown"] + error_md_tags = ["```", "```python", "```xml", "```json", "```markdown", "```sql"] if include_end == False: md_tag_end = "" else: @@ -261,7 +261,6 @@ class ApiCall: return all_context def api_view_context(self, all_context: str, display_mode: bool = False): - error_mk_tags = ["```", "```python", "```xml"] call_context_map = extract_content_open_ending( all_context, self.agent_prefix, self.agent_end, True ) @@ -294,8 +293,10 @@ class ApiCall: now_time = datetime.now().timestamp() * 1000 cost = (now_time - self.start_time) / 1000 cost_str = "{:.2f}".format(cost) - for tag in error_mk_tags: - all_context = all_context.replace(tag + api_context, api_context) + all_context = self.__deal_error_md_tags( + all_context, api_context + ) + all_context = all_context.replace( api_context, f'\nWaiting...{cost_str}S\n', @@ -444,29 +445,36 @@ class ApiCall: 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.df = data_df - value.api_result = json.loads(data_df.to_json(orient='records', date_format='iso', date_unit='s')) - value.status = Status.COMPLETED.value - else: - value.status = Status.FAILED.value - value.err_msg = "No executable sql!" + try: + 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.df = data_df + value.api_result = json.loads( + data_df.to_json(orient='records', date_format='iso', date_unit='s')) + 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 + except Exception as e: + logging.error("Api parsing exception", e) + value.status = Status.FAILED.value + value.err_msg = "Api parsing exception," + str(e) - 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) diff --git a/pilot/out_parser/base.py b/pilot/out_parser/base.py index 8c9e15d19..b4215fa45 100644 --- a/pilot/out_parser/base.py +++ b/pilot/out_parser/base.py @@ -215,6 +215,7 @@ class BaseOutputParser(ABC): .replace("\\n", " ") .replace("\n", " ") .replace("\\", " ") + .replace("\_", "_") ) cleaned_output = self.__illegal_json_ends(cleaned_output) return cleaned_output diff --git a/pilot/scene/base_chat.py b/pilot/scene/base_chat.py index cd96f8a12..5a23b0fd8 100644 --- a/pilot/scene/base_chat.py +++ b/pilot/scene/base_chat.py @@ -111,6 +111,10 @@ class BaseChat(ABC): def do_action(self, prompt_response): return prompt_response + + def message_adjust(self): + pass + def get_llm_speak(self, prompt_define_response): if hasattr(prompt_define_response, "thoughts"): if isinstance(prompt_define_response.thoughts, dict): @@ -294,6 +298,8 @@ class BaseChat(ABC): view_message = view_message.replace("\n", "\\n") self.current_message.add_view_message(view_message) + self.message_adjust() + span.end() except Exception as e: print(traceback.format_exc()) diff --git a/pilot/scene/chat_agent/chat.py b/pilot/scene/chat_agent/chat.py index 81af1b3b1..10aa2182e 100644 --- a/pilot/scene/chat_agent/chat.py +++ b/pilot/scene/chat_agent/chat.py @@ -64,7 +64,7 @@ class ChatAgent(BaseChat): return input_values def stream_plugin_call(self, text): - text = text.replace("\n", " ") + text = text.replace("\\n", " ").replace("\n", " ").replace("\_", "_").replace("\\", " ") with root_tracer.start_span( "ChatAgent.stream_plugin_call.api_call", metadata={"text": text} ): diff --git a/pilot/scene/chat_agent/prompt.py b/pilot/scene/chat_agent/prompt.py index 7d01bfd2f..94151544a 100644 --- a/pilot/scene/chat_agent/prompt.py +++ b/pilot/scene/chat_agent/prompt.py @@ -42,7 +42,8 @@ _DEFAULT_TEMPLATE_ZH = """ 3.根据上面约束的方式生成每个工具的调用,对于工具使用的提示文本,需要在工具使用前生成 4.如果用户目标无法理解和意图不明确,优先使用搜索引擎工具 5.参数内容可能需要根据用户的目标推理得到,不仅仅是从文本提取 - 6.约束条件和工具信息作为推理过程的辅助信息,不要表达在给用户的输出内容中 + 6.约束条件和工具信息作为推理过程的辅助信息,对应内容不要表达在给用户的输出内容中 + 7.不要把部分内容放在markdown标签里 {expand_constraints} 工具列表: diff --git a/pilot/scene/chat_data/chat_excel/excel_analyze/chat.py b/pilot/scene/chat_data/chat_excel/excel_analyze/chat.py index d0096878c..ccf8e2ad2 100644 --- a/pilot/scene/chat_data/chat_excel/excel_analyze/chat.py +++ b/pilot/scene/chat_data/chat_excel/excel_analyze/chat.py @@ -100,7 +100,7 @@ class ChatExcel(BaseChat): return result def stream_plugin_call(self, text): - text = text.replace("\n", " ") + text = text.replace("\\n", " ").replace("\n", " ").replace("\_", "_").replace("\\", " ") with root_tracer.start_span( "ChatExcel.stream_plugin_call.run_display_sql", metadata={"text": text} ): diff --git a/pilot/scene/chat_data/chat_excel/excel_analyze/prompt.py b/pilot/scene/chat_data/chat_excel/excel_analyze/prompt.py index 534110067..0af8b3c3a 100644 --- a/pilot/scene/chat_data/chat_excel/excel_analyze/prompt.py +++ b/pilot/scene/chat_data/chat_excel/excel_analyze/prompt.py @@ -12,7 +12,7 @@ CFG = Config() _PROMPT_SCENE_DEFINE_EN = "You are a data analysis expert. " _DEFAULT_TEMPLATE_EN = """ -Please use the data structure information in the above historical dialogue and combine it with data analysis to answer the user's questions while satisfying the constraints. +Please use the data structure column analysis information generated in the above historical dialogue to answer the user's questions through duckdb sql data analysis under the following constraints.. Constraint: 1.Please fully understand the user's problem and use duckdb sql for analysis. The analysis content is returned in the output format required below. Please output the sql in the corresponding sql parameter. @@ -30,14 +30,14 @@ User Questions: _PROMPT_SCENE_DEFINE_ZH = """你是一个数据分析专家!""" _DEFAULT_TEMPLATE_ZH = """ -请使用上述历史对话中生成的数据结构信息,在满足下面约束条件下通过duckdb sql数据分析回答用户的问题。 +请使用历史对话中的数据结构信息,在满足下面约束条件下通过duckdb sql数据分析回答用户的问题。 约束条件: 1.请充分理解用户的问题,使用duckdb sql的方式进行分析, 分析内容按下面要求的输出格式返回,sql请输出在对应的sql参数中 2.请从如下给出的展示方式种选择最优的一种用以进行数据渲染,将类型名称放入返回要求格式的name参数值种,如果找不到最合适的则使用'Table'作为展示方式,可用数据展示方式如下: {disply_type} 3.SQL中需要使用的表名是: {table_name},请检查你生成的sql,不要使用没在数据结构中的列名,。 4.优先使用数据分析的方式回答,如果用户问题不涉及数据分析内容,你可以按你的理解进行回答 5.要求的输出格式中部分需要被代码解析执行,请确保这部分内容按要求输出,不要参考历史信息的返回格式,请按下面要求返回 -请确保你的输出格式如下: +请确保你的输出内容格式如下: 对用户说的想法摘要.[数据展示方式][正确的duckdb数据分析sql] 用户问题:{user_input} @@ -59,7 +59,7 @@ PROMPT_NEED_STREAM_OUT = True # Temperature is a configuration hyperparameter that controls the randomness of language model output. # A high temperature produces more unpredictable and creative results, while a low temperature produces more common and conservative output. # For example, if you adjust the temperature to 0.5, the model will usually generate text that is more predictable and less creative than if you set the temperature to 1.0. -PROMPT_TEMPERATURE = 0.8 +PROMPT_TEMPERATURE = 0.3 prompt = PromptTemplate( template_scene=ChatScene.ChatExcel.value(), diff --git a/pilot/scene/chat_data/chat_excel/excel_learning/chat.py b/pilot/scene/chat_data/chat_excel/excel_learning/chat.py index ef66768d7..4bf12a527 100644 --- a/pilot/scene/chat_data/chat_excel/excel_learning/chat.py +++ b/pilot/scene/chat_data/chat_excel/excel_learning/chat.py @@ -4,6 +4,7 @@ from typing import Any, Dict from pilot.scene.base_message import ( HumanMessage, ViewMessage, + AIMessage ) from pilot.scene.base_chat import BaseChat from pilot.scene.base import ChatScene @@ -59,3 +60,14 @@ class ExcelLearning(BaseChat): "file_name": self.excel_reader.excel_file_name } return input_values + + def message_adjust(self): + ### adjust learning result in messages + view_message = "" + for message in self.current_message.messages: + if message.type == ViewMessage.type: + view_message = message.content + + for message in self.current_message.messages: + if message.type == AIMessage.type: + message.content = view_message \ No newline at end of file diff --git a/pilot/scene/chat_data/chat_excel/excel_learning/out_parser.py b/pilot/scene/chat_data/chat_excel/excel_learning/out_parser.py index 47e7d1653..5626d123e 100644 --- a/pilot/scene/chat_data/chat_excel/excel_learning/out_parser.py +++ b/pilot/scene/chat_data/chat_excel/excel_learning/out_parser.py @@ -21,7 +21,6 @@ class LearningExcelOutputParser(BaseOutputParser): super().__init__(sep=sep, is_stream_out=is_stream_out) self.is_downgraded = False - def parse_prompt_response(self, model_out_text): try: clean_str = super().parse_prompt_response(model_out_text) @@ -29,7 +28,7 @@ class LearningExcelOutputParser(BaseOutputParser): response = json.loads(clean_str) for key in sorted(response): if key.strip() == "DataAnalysis": - desciption = response[key] + desciption = response[key] if key.strip() == "ColumnAnalysis": clounms = response[key] if key.strip() == "AnalysisProgram": @@ -37,38 +36,40 @@ class LearningExcelOutputParser(BaseOutputParser): return ExcelResponse(desciption=desciption, clounms=clounms, plans=plans) except Exception as e: logger.error(f"parse_prompt_response Faild!{str(e)}") - self.is_downgraded = True - return ExcelResponse(desciption=model_out_text, clounms=self.data_schema, plans=None) + clounms = [] + for name in self.data_schema: + clounms.append({name: "-"}) + return ExcelResponse(desciption=model_out_text, clounms=clounms, plans=None) + def __build_colunms_html(self, clounms_data): + html_colunms = f"### **Data Structure**\n" + column_index = 0 + for item in clounms_data: + column_index += 1 + keys = item.keys() + for key in keys: + html_colunms = ( + html_colunms + f"- **{column_index}.[{key}]** _{item[key]}_\n" + ) + return html_colunms + + + def __build_plans_html(self, plans_data): + html_plans = f"### **Analysis plans**\n" + index = 0 + if plans_data: + for item in plans_data: + index += 1 + html_plans = html_plans + f"{item} \n" + return html_plans def parse_view_response(self, speak, data, prompt_response) -> str: if data and not isinstance(data, str): ### tool out data to table view html_title = f"### **Data Summary**\n{data.desciption} " - html_colunms = f"### **Data Structure**\n" - if self.is_downgraded: - column_index = 0 - for item in data.clounms: - column_index += 1 - html_colunms = ( - html_colunms + f"- **{column_index}.[{item}]** _未知_\n" - ) - else: - column_index = 0 - for item in data.clounms: - column_index += 1 - keys = item.keys() - for key in keys: - html_colunms = ( - html_colunms + f"- **{column_index}.[{key}]** _{item[key]}_\n" - ) + html_colunms = self.__build_colunms_html(data.clounms) + html_plans = self.__build_plans_html(data.plans) - html_plans = f"### **Recommended analysis plan**\n" - index = 0 - if data.plans: - for item in data.plans: - index += 1 - html_plans = html_plans + f"{item} \n" html = f"""{html_title}\n{html_colunms}\n{html_plans}""" return html else: diff --git a/pilot/scene/chat_data/chat_excel/excel_learning/prompt.py b/pilot/scene/chat_data/chat_excel/excel_learning/prompt.py index 3698576ed..205b9afba 100644 --- a/pilot/scene/chat_data/chat_excel/excel_learning/prompt.py +++ b/pilot/scene/chat_data/chat_excel/excel_learning/prompt.py @@ -28,12 +28,11 @@ _DEFAULT_TEMPLATE_ZH = """ 下面是用户文件{file_name}的一部分数据,请学习理解该数据的结构和内容,按要求输出解析结果: {data_example} 分析各列数据的含义和作用,并对专业术语进行简单明了的解释, 如果是时间类型请给出时间格式类似:yyyy-MM-dd HH:MM:ss. -将列名作为key,分析解释作为value,生成json数组如[\\{{"列名1": "分析解释内容1"\\}},\\{{"列名2":"分析解释2"\\}}],并输出在返回json内容的ColumnAnalysis属性中. -请不要修改或者翻译列名,确保和给出数据列名一致 +将列名作为属性名,分析解释作为属性值,组成json数组,并输出在返回json内容的ColumnAnalysis属性中. +请不要修改或者翻译列名,确保和给出数据列名一致. +针对数据从不同维度提供一些有用的分析思路给用户。 -提供一些分析方案思路,请一步一步思考。 - -请以确保只以JSON格式回答,格式如下: +请一步一步思考,确保只以JSON格式回答,具体格式如下: {response} """ @@ -67,7 +66,7 @@ PROMPT_NEED_STREAM_OUT = False # Temperature is a configuration hyperparameter that controls the randomness of language model output. # A high temperature produces more unpredictable and creative results, while a low temperature produces more common and conservative output. # For example, if you adjust the temperature to 0.5, the model will usually generate text that is more predictable and less creative than if you set the temperature to 1.0. -PROMPT_TEMPERATURE = 0.5 +PROMPT_TEMPERATURE = 0.8 prompt = PromptTemplate( template_scene=ChatScene.ExcelLearning.value(), diff --git a/pilot/server/static/404.html b/pilot/server/static/404.html index bcb398366..27710ebef 100644 --- a/pilot/server/static/404.html +++ b/pilot/server/static/404.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/pilot/server/static/404/index.html b/pilot/server/static/404/index.html index bcb398366..27710ebef 100644 --- a/pilot/server/static/404/index.html +++ b/pilot/server/static/404/index.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/pilot/server/static/_next/static/j9lfvm6UVgUuLg2BMjk1w/_buildManifest.js b/pilot/server/static/_next/static/8DLUDtzfrUUv_4HYlGW9p/_buildManifest.js similarity index 67% rename from pilot/server/static/_next/static/j9lfvm6UVgUuLg2BMjk1w/_buildManifest.js rename to pilot/server/static/_next/static/8DLUDtzfrUUv_4HYlGW9p/_buildManifest.js index d6750153a..67f4ccd65 100644 --- a/pilot/server/static/_next/static/j9lfvm6UVgUuLg2BMjk1w/_buildManifest.js +++ b/pilot/server/static/_next/static/8DLUDtzfrUUv_4HYlGW9p/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST=function(s,c,a,e,t,d,n,b,k,h,i,f){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static/chunks/29107295-90b90cb30c825230.js",s,c,a,d,n,b,"static/chunks/539-dcd22f1f6b99ebee.js","static/chunks/pages/index-e5fd29b9e2d6bb59.js"],"/_error":["static/chunks/pages/_error-dee72aff9b2e2c12.js"],"/agent":[s,c,e,k,t,d,"static/chunks/pages/agent-762425b419303d9d.js"],"/chat":["static/chunks/pages/chat-12498cfa4a376095.js"],"/chat/[scene]/[id]":["static/chunks/pages/chat/[scene]/[id]-39a3901132926636.js"],"/database":[s,c,a,e,t,n,h,"static/chunks/643-d8f53f40dd3c5b40.js","static/chunks/pages/database-b4f32916b9d484a7.js"],"/knowledge":[i,s,c,e,k,t,d,n,"static/chunks/109-0dace28dd2667396.js","static/chunks/pages/knowledge-fbe0df9d6a60a0b5.js"],"/knowledge/chunk":[e,t,"static/chunks/pages/knowledge/chunk-765a4b202d79ac28.js"],"/models":[i,s,c,a,f,h,"static/chunks/pages/models-cb9ab490969e70dd.js"],"/prompt":[s,c,a,f,"static/chunks/837-e6d4d1eb9e057050.js",b,"static/chunks/607-b224c640f6907e4b.js","static/chunks/pages/prompt-7f839dfd56bc4c20.js"],sortedPages:["/","/_app","/_error","/agent","/chat","/chat/[scene]/[id]","/database","/knowledge","/knowledge/chunk","/models","/prompt"]}}("static/chunks/64-91b49d45b9846775.js","static/chunks/479-b20198841f9a6a1e.js","static/chunks/9-bb2c54d5c06ba4bf.js","static/chunks/442-197e6cbc1e54109a.js","static/chunks/813-cce9482e33f2430c.js","static/chunks/924-ba8e16df4d61ff5c.js","static/chunks/411-d9eba2657c72f766.js","static/chunks/270-2f094a936d056513.js","static/chunks/365-a224ec0807392b35.js","static/chunks/928-74244889bd7f2699.js","static/chunks/75fc9c18-a784766a129ec5fb.js","static/chunks/947-5980a3ff49069ddd.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file +self.__BUILD_MANIFEST=function(s,c,a,e,t,d,n,k,b,h,f,i){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static/chunks/29107295-90b90cb30c825230.js",s,c,a,d,n,k,"static/chunks/539-dcd22f1f6b99ebee.js","static/chunks/pages/index-b1c8f59fe7e5d7df.js"],"/_error":["static/chunks/pages/_error-dee72aff9b2e2c12.js"],"/agent":[s,c,e,b,t,d,"static/chunks/pages/agent-762425b419303d9d.js"],"/chat":["static/chunks/pages/chat-12498cfa4a376095.js"],"/chat/[scene]/[id]":["static/chunks/pages/chat/[scene]/[id]-39a3901132926636.js"],"/database":[s,c,a,e,t,n,h,"static/chunks/643-d8f53f40dd3c5b40.js","static/chunks/pages/database-b4f32916b9d484a7.js"],"/knowledge":[f,s,c,e,b,t,d,n,"static/chunks/109-0dace28dd2667396.js","static/chunks/pages/knowledge-fbe0df9d6a60a0b5.js"],"/knowledge/chunk":[e,t,"static/chunks/pages/knowledge/chunk-765a4b202d79ac28.js"],"/models":[f,s,c,a,i,h,"static/chunks/pages/models-cb9ab490969e70dd.js"],"/prompt":[s,c,a,i,"static/chunks/837-e6d4d1eb9e057050.js",k,"static/chunks/607-b224c640f6907e4b.js","static/chunks/pages/prompt-7f839dfd56bc4c20.js"],sortedPages:["/","/_app","/_error","/agent","/chat","/chat/[scene]/[id]","/database","/knowledge","/knowledge/chunk","/models","/prompt"]}}("static/chunks/64-91b49d45b9846775.js","static/chunks/479-b20198841f9a6a1e.js","static/chunks/9-bb2c54d5c06ba4bf.js","static/chunks/442-197e6cbc1e54109a.js","static/chunks/813-cce9482e33f2430c.js","static/chunks/924-ba8e16df4d61ff5c.js","static/chunks/411-d9eba2657c72f766.js","static/chunks/270-2f094a936d056513.js","static/chunks/365-a224ec0807392b35.js","static/chunks/928-74244889bd7f2699.js","static/chunks/75fc9c18-a784766a129ec5fb.js","static/chunks/947-5980a3ff49069ddd.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/pilot/server/static/_next/static/j9lfvm6UVgUuLg2BMjk1w/_ssgManifest.js b/pilot/server/static/_next/static/8DLUDtzfrUUv_4HYlGW9p/_ssgManifest.js similarity index 100% rename from pilot/server/static/_next/static/j9lfvm6UVgUuLg2BMjk1w/_ssgManifest.js rename to pilot/server/static/_next/static/8DLUDtzfrUUv_4HYlGW9p/_ssgManifest.js diff --git a/pilot/server/static/_next/static/chunks/pages/_app-120ec20e0ef913c0.js b/pilot/server/static/_next/static/chunks/pages/_app-5048853e4f571e60.js similarity index 100% rename from pilot/server/static/_next/static/chunks/pages/_app-120ec20e0ef913c0.js rename to pilot/server/static/_next/static/chunks/pages/_app-5048853e4f571e60.js diff --git a/pilot/server/static/_next/static/chunks/pages/index-e5fd29b9e2d6bb59.js b/pilot/server/static/_next/static/chunks/pages/index-b1c8f59fe7e5d7df.js similarity index 100% rename from pilot/server/static/_next/static/chunks/pages/index-e5fd29b9e2d6bb59.js rename to pilot/server/static/_next/static/chunks/pages/index-b1c8f59fe7e5d7df.js diff --git a/pilot/server/static/_next/static/chunks/webpack-1af2ff4dbb3f386d.js b/pilot/server/static/_next/static/chunks/webpack-6db517c886de77b1.js similarity index 100% rename from pilot/server/static/_next/static/chunks/webpack-1af2ff4dbb3f386d.js rename to pilot/server/static/_next/static/chunks/webpack-6db517c886de77b1.js diff --git a/pilot/server/static/agent/index.html b/pilot/server/static/agent/index.html index 2b4e263df..78941f24d 100644 --- a/pilot/server/static/agent/index.html +++ b/pilot/server/static/agent/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/pilot/server/static/chat/[scene]/[id]/index.html b/pilot/server/static/chat/[scene]/[id]/index.html index 8e410a440..b093fa279 100644 --- a/pilot/server/static/chat/[scene]/[id]/index.html +++ b/pilot/server/static/chat/[scene]/[id]/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/pilot/server/static/chat/index.html b/pilot/server/static/chat/index.html index b317c862c..751362796 100644 --- a/pilot/server/static/chat/index.html +++ b/pilot/server/static/chat/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/pilot/server/static/database/index.html b/pilot/server/static/database/index.html index 215e64ff0..1b6437387 100644 --- a/pilot/server/static/database/index.html +++ b/pilot/server/static/database/index.html @@ -1 +1 @@ -
MySQL

MySQL

Fast, reliable, scalable open-source relational database management system.

MSSQL

MSSQL

Powerful, scalable, secure relational database system by Microsoft.

DuckDB

DuckDB

In-memory analytical database with efficient query processing.

Sqlite

Sqlite

Lightweight embedded relational database with simplicity and portability.

ClickHouse

ClickHouse

Columnar database for high-performance analytics and real-time queries.

Oracle

Oracle

Robust, scalable, secure relational database widely used in enterprises.

Access

Access

Easy-to-use relational database for small-scale applications by Microsoft.

MongoDB

MongoDB

Flexible, scalable NoSQL document database for web and mobile apps.

DB2

DB2

Scalable, secure relational database system developed by IBM.

HBase

HBase

Distributed, scalable NoSQL database for large structured/semi-structured data.

Redis

Redis

Fast, versatile in-memory data structure store as cache, DB, or broker.

Cassandra

Cassandra

Scalable, fault-tolerant distributed NoSQL database for large data.

Couchbase

Couchbase

High-performance NoSQL document database with distributed architecture.

PostgreSQL

PostgreSQL

Powerful open-source relational database with extensibility and SQL standards.

Spark

Spark

Unified engine for large-scale data analytics.

\ No newline at end of file +
MySQL

MySQL

Fast, reliable, scalable open-source relational database management system.

MSSQL

MSSQL

Powerful, scalable, secure relational database system by Microsoft.

DuckDB

DuckDB

In-memory analytical database with efficient query processing.

Sqlite

Sqlite

Lightweight embedded relational database with simplicity and portability.

ClickHouse

ClickHouse

Columnar database for high-performance analytics and real-time queries.

Oracle

Oracle

Robust, scalable, secure relational database widely used in enterprises.

Access

Access

Easy-to-use relational database for small-scale applications by Microsoft.

MongoDB

MongoDB

Flexible, scalable NoSQL document database for web and mobile apps.

DB2

DB2

Scalable, secure relational database system developed by IBM.

HBase

HBase

Distributed, scalable NoSQL database for large structured/semi-structured data.

Redis

Redis

Fast, versatile in-memory data structure store as cache, DB, or broker.

Cassandra

Cassandra

Scalable, fault-tolerant distributed NoSQL database for large data.

Couchbase

Couchbase

High-performance NoSQL document database with distributed architecture.

PostgreSQL

PostgreSQL

Powerful open-source relational database with extensibility and SQL standards.

Spark

Spark

Unified engine for large-scale data analytics.

\ No newline at end of file diff --git a/pilot/server/static/index.html b/pilot/server/static/index.html index 30c2b7d9e..88708ccb9 100644 --- a/pilot/server/static/index.html +++ b/pilot/server/static/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/pilot/server/static/knowledge/chunk/index.html b/pilot/server/static/knowledge/chunk/index.html index 902cd0c17..5cdd4f069 100644 --- a/pilot/server/static/knowledge/chunk/index.html +++ b/pilot/server/static/knowledge/chunk/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/pilot/server/static/knowledge/index.html b/pilot/server/static/knowledge/index.html index 758e50373..22aaebf85 100644 --- a/pilot/server/static/knowledge/index.html +++ b/pilot/server/static/knowledge/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/pilot/server/static/models/index.html b/pilot/server/static/models/index.html index ead1b28fe..ed29298be 100644 --- a/pilot/server/static/models/index.html +++ b/pilot/server/static/models/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/pilot/server/static/prompt/index.html b/pilot/server/static/prompt/index.html index 9de4cdd30..09ce5c042 100644 --- a/pilot/server/static/prompt/index.html +++ b/pilot/server/static/prompt/index.html @@ -1 +1 @@ -
NameSceneSub SceneContentOperation
No data
\ No newline at end of file +
NameSceneSub SceneContentOperation
No data
\ No newline at end of file