mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-10 05:39:11 +00:00
Make save_to_conversation_log helper function reusable
- Move it out to conversation.utils from generate_chat_response function - Log new optional intent_type argument to capture type of response expected. This can be type responses by Khoj e.g speech, image. It can be used to render responses by Khoj appropriately on clients - Make user_message_time argument optional, set the time to now by default if not passed by calling function
This commit is contained in:
@@ -4,6 +4,7 @@ from time import perf_counter
|
|||||||
import json
|
import json
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import queue
|
import queue
|
||||||
|
from typing import Any, Dict, List
|
||||||
import tiktoken
|
import tiktoken
|
||||||
|
|
||||||
# External packages
|
# External packages
|
||||||
@@ -11,6 +12,8 @@ from langchain.schema import ChatMessage
|
|||||||
from transformers import AutoTokenizer
|
from transformers import AutoTokenizer
|
||||||
|
|
||||||
# Internal Packages
|
# Internal Packages
|
||||||
|
from khoj.database.adapters import ConversationAdapters
|
||||||
|
from khoj.database.models import KhojUser
|
||||||
from khoj.utils.helpers import merge_dicts
|
from khoj.utils.helpers import merge_dicts
|
||||||
|
|
||||||
|
|
||||||
@@ -89,6 +92,32 @@ def message_to_log(
|
|||||||
return conversation_log
|
return conversation_log
|
||||||
|
|
||||||
|
|
||||||
|
def save_to_conversation_log(
|
||||||
|
q: str,
|
||||||
|
chat_response: str,
|
||||||
|
user: KhojUser,
|
||||||
|
meta_log: Dict,
|
||||||
|
user_message_time: str = None,
|
||||||
|
compiled_references: List[str] = [],
|
||||||
|
online_results: Dict[str, Any] = {},
|
||||||
|
inferred_queries: List[str] = [],
|
||||||
|
intent_type: str = "remember",
|
||||||
|
):
|
||||||
|
user_message_time = user_message_time or datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
updated_conversation = message_to_log(
|
||||||
|
user_message=q,
|
||||||
|
chat_response=chat_response,
|
||||||
|
user_message_metadata={"created": user_message_time},
|
||||||
|
khoj_message_metadata={
|
||||||
|
"context": compiled_references,
|
||||||
|
"intent": {"inferred-queries": inferred_queries, "type": intent_type},
|
||||||
|
"onlineContext": online_results,
|
||||||
|
},
|
||||||
|
conversation_log=meta_log.get("chat", []),
|
||||||
|
)
|
||||||
|
ConversationAdapters.save_conversation(user, {"chat": updated_conversation})
|
||||||
|
|
||||||
|
|
||||||
def generate_chatml_messages_with_context(
|
def generate_chatml_messages_with_context(
|
||||||
user_message,
|
user_message,
|
||||||
system_message,
|
system_message,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ from khoj.database.models import KhojUser, Subscription
|
|||||||
from khoj.processor.conversation import prompts
|
from khoj.processor.conversation import prompts
|
||||||
from khoj.processor.conversation.offline.chat_model import converse_offline, send_message_to_model_offline
|
from khoj.processor.conversation.offline.chat_model import converse_offline, send_message_to_model_offline
|
||||||
from khoj.processor.conversation.openai.gpt import converse, send_message_to_model
|
from khoj.processor.conversation.openai.gpt import converse, send_message_to_model
|
||||||
from khoj.processor.conversation.utils import ThreadedGenerator, message_to_log
|
from khoj.processor.conversation.utils import ThreadedGenerator, save_to_conversation_log
|
||||||
|
|
||||||
# Internal Packages
|
# Internal Packages
|
||||||
from khoj.utils import state
|
from khoj.utils import state
|
||||||
@@ -186,30 +186,7 @@ def generate_chat_response(
|
|||||||
conversation_command: ConversationCommand = ConversationCommand.Default,
|
conversation_command: ConversationCommand = ConversationCommand.Default,
|
||||||
user: KhojUser = None,
|
user: KhojUser = None,
|
||||||
) -> Tuple[Union[ThreadedGenerator, Iterator[str]], Dict[str, str]]:
|
) -> Tuple[Union[ThreadedGenerator, Iterator[str]], Dict[str, str]]:
|
||||||
def _save_to_conversation_log(
|
|
||||||
q: str,
|
|
||||||
chat_response: str,
|
|
||||||
user_message_time: str,
|
|
||||||
compiled_references: List[str],
|
|
||||||
online_results: Dict[str, Any],
|
|
||||||
inferred_queries: List[str],
|
|
||||||
meta_log,
|
|
||||||
):
|
|
||||||
updated_conversation = message_to_log(
|
|
||||||
user_message=q,
|
|
||||||
chat_response=chat_response,
|
|
||||||
user_message_metadata={"created": user_message_time},
|
|
||||||
khoj_message_metadata={
|
|
||||||
"context": compiled_references,
|
|
||||||
"intent": {"inferred-queries": inferred_queries},
|
|
||||||
"onlineContext": online_results,
|
|
||||||
},
|
|
||||||
conversation_log=meta_log.get("chat", []),
|
|
||||||
)
|
|
||||||
ConversationAdapters.save_conversation(user, {"chat": updated_conversation})
|
|
||||||
|
|
||||||
# Initialize Variables
|
# Initialize Variables
|
||||||
user_message_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
chat_response = None
|
chat_response = None
|
||||||
logger.debug(f"Conversation Type: {conversation_command.name}")
|
logger.debug(f"Conversation Type: {conversation_command.name}")
|
||||||
|
|
||||||
@@ -217,13 +194,13 @@ def generate_chat_response(
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
partial_completion = partial(
|
partial_completion = partial(
|
||||||
_save_to_conversation_log,
|
save_to_conversation_log,
|
||||||
q,
|
q,
|
||||||
user_message_time=user_message_time,
|
user=user,
|
||||||
|
meta_log=meta_log,
|
||||||
compiled_references=compiled_references,
|
compiled_references=compiled_references,
|
||||||
online_results=online_results,
|
online_results=online_results,
|
||||||
inferred_queries=inferred_queries,
|
inferred_queries=inferred_queries,
|
||||||
meta_log=meta_log,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
conversation_config = ConversationAdapters.get_valid_conversation_config(user)
|
conversation_config = ConversationAdapters.get_valid_conversation_config(user)
|
||||||
|
|||||||
Reference in New Issue
Block a user