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:
sabaimran
2024-02-23 11:32:00 -08:00
committed by GitHub
parent 9afb2a14ef
commit 42773e808c
3 changed files with 28 additions and 13 deletions

View File

@@ -1246,7 +1246,7 @@
margin: 0;
}
.chat-message-text-response {
margin-bottom: -16px;
margin-bottom: 0px;
}
/* Spinner symbol when the chat message is loading */

View File

@@ -397,12 +397,17 @@ class ConversationAdapters:
user: KhojUser, client_application: ClientApplication = None, conversation_id: int = None
):
if conversation_id:
conversation = Conversation.objects.filter(user=user, client=client_application, id=conversation_id)
if not conversation_id or not conversation.exists():
conversation = Conversation.objects.filter(user=user, client=client_application).order_by("-updated_at")
if conversation.exists():
return conversation.first()
return Conversation.objects.create(user=user, client=client_application)
conversation = (
Conversation.objects.filter(user=user, client=client_application, id=conversation_id)
.order_by("-updated_at")
.first()
)
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
def get_conversation_sessions(user: KhojUser, client_application: ClientApplication = None):
@@ -435,10 +440,14 @@ class ConversationAdapters:
):
if 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)
else:
conversation = Conversation.objects.filter(user=user, client=client_application).order_by("-updated_at")
if await conversation.aexists():
return await conversation.afirst()
return await Conversation.objects.acreate(user=user, client=client_application, slug=slug)
@staticmethod
@@ -517,11 +526,17 @@ class ConversationAdapters:
):
slug = user_message.strip()[:200] if user_message else None
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:
conversation = Conversation.objects.filter(user=user, client=client_application)
if conversation.exists():
conversation.update(conversation_log=conversation_log, slug=slug, updated_at=datetime.now(tz=timezone.utc))
conversation = (
Conversation.objects.filter(user=user, client=client_application).order_by("-updated_at").first()
)
if conversation:
conversation.conversation_log = conversation_log
conversation.slug = slug
conversation.updated_at = datetime.now(tz=timezone.utc)
conversation.save()
else:
Conversation.objects.create(
user=user, conversation_log=conversation_log, client=client_application, slug=slug

View File

@@ -1312,7 +1312,7 @@ To get started, just start typing below. You can also type / to see a list of co
margin: 0;
}
.chat-message-text-response {
margin-bottom: -16px;
margin-bottom: 0px;
}
/* Spinner symbol when the chat message is loading */