mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-08 05:39:13 +00:00
Retrieve, create, and save conversations differently for ClientApplications (#656)
* Retrieve, create, and save conversations differently if they're coming from a client application - Not all of our client apps will necessarily maintain state over the conversation IDs available to a user. For some (single-threaded conversations), it should just use a single conversation. Fix the code to do so * Simplify conversation retrieval logic * Keep 0 padding below chat response * Add order_by sorting to retrieving the conversation without id
This commit is contained in:
@@ -1246,7 +1246,7 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
.chat-message-text-response {
|
.chat-message-text-response {
|
||||||
margin-bottom: -16px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Spinner symbol when the chat message is loading */
|
/* Spinner symbol when the chat message is loading */
|
||||||
|
|||||||
@@ -397,12 +397,17 @@ class ConversationAdapters:
|
|||||||
user: KhojUser, client_application: ClientApplication = None, conversation_id: int = None
|
user: KhojUser, client_application: ClientApplication = None, conversation_id: int = None
|
||||||
):
|
):
|
||||||
if conversation_id:
|
if conversation_id:
|
||||||
conversation = Conversation.objects.filter(user=user, client=client_application, id=conversation_id)
|
conversation = (
|
||||||
if not conversation_id or not conversation.exists():
|
Conversation.objects.filter(user=user, client=client_application, id=conversation_id)
|
||||||
conversation = Conversation.objects.filter(user=user, client=client_application).order_by("-updated_at")
|
.order_by("-updated_at")
|
||||||
if conversation.exists():
|
.first()
|
||||||
return conversation.first()
|
)
|
||||||
return Conversation.objects.create(user=user, client=client_application)
|
else:
|
||||||
|
conversation = (
|
||||||
|
Conversation.objects.filter(user=user, client=client_application).order_by("-updated_at").first()
|
||||||
|
)
|
||||||
|
|
||||||
|
return conversation or Conversation.objects.create(user=user, client=client_application)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_conversation_sessions(user: KhojUser, client_application: ClientApplication = None):
|
def get_conversation_sessions(user: KhojUser, client_application: ClientApplication = None):
|
||||||
@@ -435,10 +440,14 @@ class ConversationAdapters:
|
|||||||
):
|
):
|
||||||
if conversation_id:
|
if conversation_id:
|
||||||
conversation = Conversation.objects.filter(user=user, client=client_application, id=conversation_id)
|
conversation = Conversation.objects.filter(user=user, client=client_application, id=conversation_id)
|
||||||
else:
|
elif slug:
|
||||||
conversation = Conversation.objects.filter(user=user, client=client_application, slug=slug)
|
conversation = Conversation.objects.filter(user=user, client=client_application, slug=slug)
|
||||||
|
else:
|
||||||
|
conversation = Conversation.objects.filter(user=user, client=client_application).order_by("-updated_at")
|
||||||
|
|
||||||
if await conversation.aexists():
|
if await conversation.aexists():
|
||||||
return await conversation.afirst()
|
return await conversation.afirst()
|
||||||
|
|
||||||
return await Conversation.objects.acreate(user=user, client=client_application, slug=slug)
|
return await Conversation.objects.acreate(user=user, client=client_application, slug=slug)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -517,11 +526,17 @@ class ConversationAdapters:
|
|||||||
):
|
):
|
||||||
slug = user_message.strip()[:200] if user_message else None
|
slug = user_message.strip()[:200] if user_message else None
|
||||||
if conversation_id:
|
if conversation_id:
|
||||||
conversation = Conversation.objects.filter(user=user, client=client_application, id=conversation_id)
|
conversation = Conversation.objects.filter(user=user, client=client_application, id=conversation_id).first()
|
||||||
else:
|
else:
|
||||||
conversation = Conversation.objects.filter(user=user, client=client_application)
|
conversation = (
|
||||||
if conversation.exists():
|
Conversation.objects.filter(user=user, client=client_application).order_by("-updated_at").first()
|
||||||
conversation.update(conversation_log=conversation_log, slug=slug, updated_at=datetime.now(tz=timezone.utc))
|
)
|
||||||
|
|
||||||
|
if conversation:
|
||||||
|
conversation.conversation_log = conversation_log
|
||||||
|
conversation.slug = slug
|
||||||
|
conversation.updated_at = datetime.now(tz=timezone.utc)
|
||||||
|
conversation.save()
|
||||||
else:
|
else:
|
||||||
Conversation.objects.create(
|
Conversation.objects.create(
|
||||||
user=user, conversation_log=conversation_log, client=client_application, slug=slug
|
user=user, conversation_log=conversation_log, client=client_application, slug=slug
|
||||||
|
|||||||
@@ -1312,7 +1312,7 @@ To get started, just start typing below. You can also type / to see a list of co
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
.chat-message-text-response {
|
.chat-message-text-response {
|
||||||
margin-bottom: -16px;
|
margin-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Spinner symbol when the chat message is loading */
|
/* Spinner symbol when the chat message is loading */
|
||||||
|
|||||||
Reference in New Issue
Block a user