mirror of
https://github.com/QuivrHQ/quivr.git
synced 2024-09-11 14:36:35 +03:00
feat(rag): follow-up questions and thoughts with spanish fix (#2618)
This pull request refactors the generate_answer and generate_stream functions in order to improve code readability and maintainability. It also adds new fields to the cited_answer model and updates the system message template.
This commit is contained in:
parent
c06500086c
commit
877e8500bb
@ -305,8 +305,16 @@ class KnowledgeBrainQA(BaseModel, QAInterface):
|
|||||||
if self.model_compatible_with_function_calling(model=self.model):
|
if self.model_compatible_with_function_calling(model=self.model):
|
||||||
if model_response["answer"].tool_calls:
|
if model_response["answer"].tool_calls:
|
||||||
citations = model_response["answer"].tool_calls[-1]["args"]["citations"]
|
citations = model_response["answer"].tool_calls[-1]["args"]["citations"]
|
||||||
|
followup_questions = model_response["answer"].tool_calls[-1]["args"][
|
||||||
|
"followup_questions"
|
||||||
|
]
|
||||||
|
thoughts = model_response["answer"].tool_calls[-1]["args"]["thoughts"]
|
||||||
if citations:
|
if citations:
|
||||||
citations = citations
|
citations = citations
|
||||||
|
if followup_questions:
|
||||||
|
metadata["followup_questions"] = followup_questions
|
||||||
|
if thoughts:
|
||||||
|
metadata["thoughts"] = thoughts
|
||||||
answer = model_response["answer"].tool_calls[-1]["args"]["answer"]
|
answer = model_response["answer"].tool_calls[-1]["args"]["answer"]
|
||||||
else:
|
else:
|
||||||
answer = model_response["answer"].content
|
answer = model_response["answer"].content
|
||||||
@ -370,6 +378,24 @@ class KnowledgeBrainQA(BaseModel, QAInterface):
|
|||||||
and "citations" in gathered.tool_calls[-1]["args"]
|
and "citations" in gathered.tool_calls[-1]["args"]
|
||||||
):
|
):
|
||||||
citations = gathered.tool_calls[-1]["args"]["citations"]
|
citations = gathered.tool_calls[-1]["args"]["citations"]
|
||||||
|
if (
|
||||||
|
gathered.tool_calls
|
||||||
|
and gathered.tool_calls[-1].get("args")
|
||||||
|
and "followup_questions" in gathered.tool_calls[-1]["args"]
|
||||||
|
):
|
||||||
|
followup_questions = gathered.tool_calls[-1]["args"][
|
||||||
|
"followup_questions"
|
||||||
|
]
|
||||||
|
streamed_chat_history.metadata["followup_questions"] = (
|
||||||
|
followup_questions
|
||||||
|
)
|
||||||
|
if (
|
||||||
|
gathered.tool_calls
|
||||||
|
and gathered.tool_calls[-1].get("args")
|
||||||
|
and "thoughts" in gathered.tool_calls[-1]["args"]
|
||||||
|
):
|
||||||
|
thoughts = gathered.tool_calls[-1]["args"]["thoughts"]
|
||||||
|
streamed_chat_history.metadata["thoughts"] = thoughts
|
||||||
else:
|
else:
|
||||||
if chunk.get("answer"):
|
if chunk.get("answer"):
|
||||||
response_tokens += chunk["answer"].content
|
response_tokens += chunk["answer"].content
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import datetime
|
||||||
import os
|
import os
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
@ -44,9 +45,18 @@ class cited_answer(BaseModelV1):
|
|||||||
description="The integer IDs of the SPECIFIC sources which justify the answer.",
|
description="The integer IDs of the SPECIFIC sources which justify the answer.",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
thoughts: str = FieldV1(
|
||||||
|
...,
|
||||||
|
description="Explain shortly what you did to generate the answer. Explain any assumptions you made, and why you made them.",
|
||||||
|
)
|
||||||
|
followup_questions: List[str] = FieldV1(
|
||||||
|
...,
|
||||||
|
description="Generate up to 3 follow-up questions that could be asked based on the answer given or context provided.",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# First step is to create the Rephrasing Prompt
|
# First step is to create the Rephrasing Prompt
|
||||||
_template = """Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language. Keep as much details as possible from previous messages. Keep entity names and all.
|
_template = """Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question, in its original language. Keep as much details as possible from previous messages. Keep entity names and all.
|
||||||
|
|
||||||
Chat History:
|
Chat History:
|
||||||
{chat_history}
|
{chat_history}
|
||||||
@ -64,11 +74,20 @@ User Question: {question}
|
|||||||
Answer:
|
Answer:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
system_message_template = """
|
today_date = datetime.datetime.now().strftime("%B %d, %Y")
|
||||||
When answering use markdown to make it concise and neat.
|
|
||||||
Use the following pieces of context from files provided by the user that are store in a brain to answer the users question in the same language as the user question. Your name is Quivr. You're a helpful assistant.
|
system_message_template = (
|
||||||
|
f"Your name is Quivr. You're a helpful assistant. Today's date is {today_date}."
|
||||||
|
)
|
||||||
|
|
||||||
|
system_message_template += """
|
||||||
|
When answering use markdown neat.
|
||||||
|
Answer in a concise and clear manner.
|
||||||
|
Use the following pieces of context from files provided by the user to answer the users.
|
||||||
|
Answer in the same language as the user question.
|
||||||
If you don't know the answer with the context provided from the files, just say that you don't know, don't try to make up an answer.
|
If you don't know the answer with the context provided from the files, just say that you don't know, don't try to make up an answer.
|
||||||
User instruction to follow if provided to answer: {custom_instructions}
|
If not None, User instruction to follow to answer: {custom_instructions}
|
||||||
|
Don't cite the source id in the answer objects, but you can use the source to answer the question.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user