Revert "Refa: Chats /chat API to RESTFul (#13871)" (#13877)

### What problem does this PR solve?

This reverts commit 1a608ac411.

### Type of change

- [x] Other (please describe):
This commit is contained in:
Liu An
2026-04-01 11:05:29 +08:00
committed by GitHub
parent 1a608ac411
commit b1d28b5898
52 changed files with 3584 additions and 2044 deletions

View File

@@ -54,9 +54,5 @@ class Base:
res = self.rag.put(path, json)
return res
def patch(self, path, json):
res = self.rag.patch(path, json)
return res
def __str__(self):
return str(self.to_json())

View File

@@ -23,22 +23,50 @@ class Chat(Base):
def __init__(self, rag, res_dict):
self.id = ""
self.name = "assistant"
self.icon = ""
self.dataset_ids = []
self.llm_id = None
self.llm_setting = {}
self.prompt_config = {}
self.similarity_threshold = 0.2
self.vector_similarity_weight = 0.3
self.top_n = 6
self.top_k = 1024
self.rerank_id = ""
self.avatar = "path/to/avatar"
self.llm = Chat.LLM(rag, {})
self.prompt = Chat.Prompt(rag, {})
super().__init__(rag, res_dict)
class LLM(Base):
def __init__(self, rag, res_dict):
self.model_name = None
self.temperature = 0.1
self.top_p = 0.3
self.presence_penalty = 0.4
self.frequency_penalty = 0.7
self.max_tokens = 512
super().__init__(rag, res_dict)
class Prompt(Base):
def __init__(self, rag, res_dict):
self.similarity_threshold = 0.2
self.keywords_similarity_weight = 0.7
self.top_n = 8
self.top_k = 1024
self.variables = [{"key": "knowledge", "optional": True}]
self.rerank_model = ""
self.empty_response = None
self.opener = "Hi! I'm your assistant. What can I do for you?"
self.show_quote = True
self.prompt = (
"You are an intelligent assistant. Your primary function is to answer questions based strictly on the provided knowledge base."
"**Essential Rules:**"
"- Your answer must be derived **solely** from this knowledge base: `{knowledge}`."
"- **When information is available**: Summarize the content to give a detailed answer."
"- **When information is unavailable**: Your response must contain this exact sentence: 'The answer you are looking for is not found in the knowledge base!' "
"- **Always consider** the entire conversation history."
)
super().__init__(rag, res_dict)
def update(self, update_message: dict):
if not isinstance(update_message, dict):
raise Exception("ValueError('`update_message` must be a dict')")
res = self.patch(f"/chats/{self.id}", update_message)
if update_message.get("llm") == {}:
raise Exception("ValueError('`llm` cannot be empty')")
if update_message.get("prompt") == {}:
raise Exception("ValueError('`prompt` cannot be empty')")
res = self.put(f"/chats/{self.id}", update_message)
res = res.json()
if res.get("code") != 0:
raise Exception(res["message"])

View File

@@ -49,10 +49,6 @@ class RAGFlow:
res = requests.put(url=self.api_url + path, json=json, headers=self.authorization_header)
return res
def patch(self, path, json):
res = requests.patch(url=self.api_url + path, json=json, headers=self.authorization_header)
return res
def create_dataset(
self,
name: str,
@@ -115,25 +111,55 @@ class RAGFlow:
return result_list
raise Exception(res["message"])
def create_chat(
self,
name: str,
icon: str = "",
dataset_ids: list[str] | None = None,
llm_id: str | None = None,
llm_setting: dict | None = None,
prompt_config: dict | None = None,
**kwargs,
) -> Chat:
payload = {"name": name, "icon": icon, "dataset_ids": dataset_ids or []}
if llm_id is not None:
payload["llm_id"] = llm_id
if llm_setting is not None:
payload["llm_setting"] = llm_setting
if prompt_config is not None:
payload["prompt_config"] = prompt_config
payload.update(kwargs)
res = self.post("/chats", payload)
def create_chat(self, name: str, avatar: str = "", dataset_ids=None, llm: Chat.LLM | None = None, prompt: Chat.Prompt | None = None) -> Chat:
if dataset_ids is None:
dataset_ids = []
dataset_list = []
for id in dataset_ids:
dataset_list.append(id)
if llm is None:
llm = Chat.LLM(
self,
{
"model_name": None,
"temperature": 0.1,
"top_p": 0.3,
"presence_penalty": 0.4,
"frequency_penalty": 0.7,
"max_tokens": 512,
},
)
if prompt is None:
prompt = Chat.Prompt(
self,
{
"similarity_threshold": 0.2,
"keywords_similarity_weight": 0.7,
"top_n": 8,
"top_k": 1024,
"variables": [{"key": "knowledge", "optional": True}],
"rerank_model": "",
"empty_response": None,
"opener": None,
"show_quote": True,
"prompt": None,
},
)
if prompt.opener is None:
prompt.opener = "Hi! I'm your assistant. What can I do for you?"
if prompt.prompt is None:
prompt.prompt = (
"You are an intelligent assistant. Your primary function is to answer questions based strictly on the provided knowledge base."
"**Essential Rules:**"
"- Your answer must be derived **solely** from this knowledge base: `{knowledge}`."
"- **When information is available**: Summarize the content to give a detailed answer."
"- **When information is unavailable**: Your response must contain this exact sentence: 'The answer you are looking for is not found in the knowledge base!' "
"- **Always consider** the entire conversation history."
)
temp_dict = {"name": name, "avatar": avatar, "dataset_ids": dataset_list if dataset_list else [], "llm": llm.to_json(), "prompt": prompt.to_json()}
res = self.post("/chats", temp_dict)
res = res.json()
if res.get("code") == 0:
return Chat(self, res["data"])
@@ -145,24 +171,7 @@ class RAGFlow:
if res.get("code") != 0:
raise Exception(res["message"])
def get_chat(self, chat_id: str) -> Chat:
res = self.get(f"/chats/{chat_id}")
res = res.json()
if res.get("code") == 0:
return Chat(self, res["data"])
raise Exception(res["message"])
def list_chats(
self,
page: int = 1,
page_size: int = 30,
orderby: str = "create_time",
desc: bool = True,
id: str | None = None,
name: str | None = None,
keywords: str | None = None,
owner_ids: str | list[str] | None = None,
) -> list[Chat]:
def list_chats(self, page: int = 1, page_size: int = 30, orderby: str = "create_time", desc: bool = True, id: str | None = None, name: str | None = None) -> list[Chat]:
res = self.get(
"/chats",
{
@@ -172,14 +181,12 @@ class RAGFlow:
"desc": desc,
"id": id,
"name": name,
"keywords": keywords,
"owner_ids": owner_ids,
},
)
res = res.json()
result_list = []
if res.get("code") == 0:
for data in res["data"]["chats"]:
for data in res["data"]:
result_list.append(Chat(self, data))
return result_list
raise Exception(res["message"])