|
@@ -888,16 +888,20 @@ async def process_chat_payload(request, form_data, user, metadata, model):
|
|
|
# If context is not empty, insert it into the messages
|
|
|
if len(sources) > 0:
|
|
|
context_string = ""
|
|
|
- citated_file_idx = {}
|
|
|
- for _, source in enumerate(sources, 1):
|
|
|
+ citation_idx = {}
|
|
|
+ for source in sources:
|
|
|
if "document" in source:
|
|
|
for doc_context, doc_meta in zip(
|
|
|
source["document"], source["metadata"]
|
|
|
):
|
|
|
- file_id = doc_meta.get("file_id")
|
|
|
- if file_id not in citated_file_idx:
|
|
|
- citated_file_idx[file_id] = len(citated_file_idx) + 1
|
|
|
- context_string += f'<source id="{citated_file_idx[file_id]}">{doc_context}</source>\n'
|
|
|
+ citation_id = (
|
|
|
+ doc_meta.get("source", None)
|
|
|
+ or source.get("source", {}).get("id", None)
|
|
|
+ or "N/A"
|
|
|
+ )
|
|
|
+ if citation_id not in citation_idx:
|
|
|
+ citation_idx[citation_id] = len(citation_idx) + 1
|
|
|
+ context_string += f'<source id="{citation_idx[citation_id]}">{doc_context}</source>\n'
|
|
|
|
|
|
context_string = context_string.strip()
|
|
|
prompt = get_last_user_message(form_data["messages"])
|