add functionality to clone shared chats

This commit is contained in:
Srajan Garg
2025-01-03 00:08:49 -05:00
parent 87ba39df57
commit 2444327a47
4 changed files with 90 additions and 3 deletions

View File

@@ -469,6 +469,8 @@ class ChatTable:
def get_chat_by_share_id(self, id: str) -> Optional[ChatModel]:
try:
with get_db() as db:
# it is possible that the shared link was deleted. hence,
# we check if the chat is still shared by checkng if a chat with the share_id exists
chat = db.query(Chat).filter_by(share_id=id).first()
if chat:

View File

@@ -463,6 +463,31 @@ async def clone_chat_by_id(id: str, user=Depends(get_verified_user)):
)
############################
# CloneChatByShareId
############################
@router.post("/{share_id}/clone_shared", response_model=Optional[ChatResponse])
async def clone_chat_by_share_id(share_id: str, user=Depends(get_verified_user)):
chat = Chats.get_chat_by_share_id(share_id)
if chat:
updated_chat = {
**chat.chat,
"originalChatId": chat.id,
"branchPointMessageId": chat.chat["history"]["currentId"],
"title": f"Clone of {chat.title}",
}
chat = Chats.insert_new_chat(user.id, ChatForm(**{"chat": updated_chat}))
return ChatResponse(**chat.model_dump())
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.DEFAULT()
)
############################
# ArchiveChat
############################