mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-06-29 15:31:05 +08:00
### What problem does this PR solve?
This reverts commit 1a608ac411.
### Type of change
- [x] Other (please describe):
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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"])
|
||||
|
||||
@@ -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"])
|
||||
|
||||
Reference in New Issue
Block a user