diff --git a/api/apps/conversation_app.py b/api/apps/conversation_app.py
index 40996aa1c1a4e34dc8dd80f3582be0166aef05a5..49374b09168f4673a65705017f12ba2d09361130 100644
--- a/api/apps/conversation_app.py
+++ b/api/apps/conversation_app.py
@@ -248,8 +248,10 @@ def chat(dialog, messages, **kwargs):
                                                    tkweight=1 - dialog.vector_similarity_weight,
                                                    vtweight=dialog.vector_similarity_weight)
         idx = set([kbinfos["chunks"][int(i)]["doc_id"] for i in idx])
-        kbinfos["doc_aggs"] = [
+        recall_docs = [
             d for d in kbinfos["doc_aggs"] if d["doc_id"] in idx]
+        if not recall_docs: recall_docs = kbinfos["doc_aggs"]
+        kbinfos["doc_aggs"] = recall_docs
     for c in kbinfos["chunks"]:
         if c.get("vector"):
             del c["vector"]
diff --git a/api/apps/llm_app.py b/api/apps/llm_app.py
index e8d42a3ed8a849c7fcbaf195e8cb4fdc1ee7d8a9..a0eb80af8fe24b50b53bc1b7d3efb020d4ba970c 100644
--- a/api/apps/llm_app.py
+++ b/api/apps/llm_app.py
@@ -45,7 +45,7 @@ def set_api_key():
     for llm in LLMService.query(fid=factory):
         if llm.model_type == LLMType.EMBEDDING.value:
             mdl = EmbeddingModel[factory](
-                req["api_key"], llm.llm_name, req.get("base_url"))
+                req["api_key"], llm.llm_name, base_url=req.get("base_url"))
             try:
                 arr, tc = mdl.encode(["Test if the api key is available"])
                 if len(arr[0]) == 0 or tc == 0:
@@ -54,7 +54,7 @@ def set_api_key():
                 msg += f"\nFail to access embedding model({llm.llm_name}) using this api key." + str(e)
         elif not chat_passed and llm.model_type == LLMType.CHAT.value:
             mdl = ChatModel[factory](
-                req["api_key"], llm.llm_name, req.get("base_url"))
+                req["api_key"], llm.llm_name, base_url=req.get("base_url"))
             try:
                 m, tc = mdl.chat(None, [{"role": "user", "content": "Hello! How are you doing!"}], {
                                  "temperature": 0.9})
diff --git a/api/db/services/__init__.py b/api/db/services/__init__.py
index 8286cc0e6e7563921757f286336982a23fdaa40b..e324030aa9523888763c1e9394d7caefc582681f 100644
--- a/api/db/services/__init__.py
+++ b/api/db/services/__init__.py
@@ -24,7 +24,7 @@ def duplicate_name(query_func, **kwargs):
     if not objs: return fnm
     ext = pathlib.Path(fnm).suffix #.jpg
     nm = re.sub(r"%s$"%ext, "", fnm)
-    r = re.search(r"\([0-9]+\)$", nm)
+    r = re.search(r"\(([0-9]+)\)$", nm)
     c = 0
     if r:
         c = int(r.group(1))
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..40ae03a692f267cbc1a8868ee5be3546bfc39aa1
--- /dev/null
+++ b/docs/CONTRIBUTING.md
@@ -0,0 +1,52 @@
+---
+sidebar_position: 0
+slug: /contribution_guidelines
+---
+
+# Contribution Guidelines
+
+Thanks for wanting to contribute to RAGFlow. This document offers guidlines and major considerations for submitting your contributions. 
+
+- To report a bug, file a [GitHub issue](https://github.com/infiniflow/ragflow/issues/new/choose) with us.
+- For further questions, you can explore existing discussions or initiate a new one in [Discussions](https://github.com/orgs/infiniflow/discussions).
+
+
+## What you can contribute
+
+The list below mentions some contributions you can make, but it is not a complete list.
+
+- Proposing or implementing new features
+- Fixing a bug
+- Adding test cases or demos
+- Posting a blog or tutorial
+- Updates to existing documents, codes, or annotations.
+- Suggesting more user-friendly error codes
+
+## File a pull request (PR)
+
+### General workflow
+
+1. Fork our GitHub repository.
+2. Clone your fork to your local machine: 
+`git clone git@github.com:<yourname>/ragflow.git`
+3. Create a local branch: 
+`git checkout -b my-branch`
+4. Provide sufficient information in your commit message
+`git commit -m 'Provide sufficient info in your commit message'`
+5. Commit changes to your local branch, and push to GitHub: (include necessary commit message)
+`git push origin my-branch.`
+6. Submit a pull request for review.
+
+### Before filing a PR
+
+- Consider splitting a large PR into multiple smaller, standalone PRs to keep a traceable development history. 
+- Ensure that your PR addresses just one issue, or keep any unrelated changes small.
+- Add test cases when contributing new features. They demonstrate that your code functions correctly and protect against potential issues from future changes.
+### Describing your PR 
+
+- Ensure that your PR title is concise and clear, providing all the required information.
+- Refer to a corresponding GitHub issue in your PR description if applicable. 
+- Include sufficient design details for *breaking changes* or *API changes* in your description.
+
+### Reviewing & merging a PR
+- Ensure that your PR passes all Continuous Integration (CI) tests before merging it.
\ No newline at end of file