Source code for langchain_community.chat_loaders.utils
"""Utilities for chat loaders."""fromcopyimportdeepcopyfromtypingimportIterable,Iterator,Listfromlangchain_core.chat_sessionsimportChatSessionfromlangchain_core.messagesimportAIMessage,BaseMessage
[docs]defmerge_chat_runs_in_session(chat_session:ChatSession,delimiter:str="\n\n")->ChatSession:"""Merge chat runs together in a chat session. A chat run is a sequence of messages from the same sender. Args: chat_session: A chat session. Returns: A chat session with merged chat runs. """messages:List[BaseMessage]=[]formessageinchat_session["messages"]:ifnotisinstance(message.content,str):raiseValueError("Chat Loaders only support messages with content type string, "f"got {message.content}")ifnotmessages:messages.append(deepcopy(message))elif(isinstance(message,type(messages[-1]))andmessages[-1].additional_kwargs.get("sender")isnotNoneandmessages[-1].additional_kwargs["sender"]==message.additional_kwargs.get("sender")):ifnotisinstance(messages[-1].content,str):raiseValueError("Chat Loaders only support messages with content type string, "f"got {messages[-1].content}")messages[-1].content=(messages[-1].content+delimiter+message.content).strip()messages[-1].additional_kwargs.get("events",[]).extend(message.additional_kwargs.get("events")or[])else:messages.append(deepcopy(message))returnChatSession(messages=messages)
[docs]defmerge_chat_runs(chat_sessions:Iterable[ChatSession])->Iterator[ChatSession]:"""Merge chat runs together. A chat run is a sequence of messages from the same sender. Args: chat_sessions: A list of chat sessions. Returns: A list of chat sessions with merged chat runs. """forchat_sessioninchat_sessions:yieldmerge_chat_runs_in_session(chat_session)
[docs]defmap_ai_messages_in_session(chat_sessions:ChatSession,sender:str)->ChatSession:"""Convert messages from the specified 'sender' to AI messages. This is useful for fine-tuning the AI to adapt to your voice. """messages=[]num_converted=0formessageinchat_sessions["messages"]:ifmessage.additional_kwargs.get("sender")==sender:message=AIMessage(content=message.content,additional_kwargs=message.additional_kwargs.copy(),example=getattr(message,"example",None),# type: ignore[arg-type])num_converted+=1messages.append(message)returnChatSession(messages=messages)
[docs]defmap_ai_messages(chat_sessions:Iterable[ChatSession],sender:str)->Iterator[ChatSession]:"""Convert messages from the specified 'sender' to AI messages. This is useful for fine-tuning the AI to adapt to your voice. """forchat_sessioninchat_sessions:yieldmap_ai_messages_in_session(chat_session,sender)