iMessage
This notebook shows how to use the iMessage chat loader. This class helps convert iMessage conversations to LangChain chat messages.
On MacOS, iMessage stores conversations in a sqlite database at ~/Library/Messages/chat.db
(at least for macOS Ventura 13.4).
The IMessageChatLoader
loads from this database file.
- Create the
IMessageChatLoader
with the file path pointed tochat.db
database you'd like to process. - Call
loader.load()
(orloader.lazy_load()
) to perform the conversion. Optionally usemerge_chat_runs
to combine message from the same sender in sequence, and/ormap_ai_messages
to convert messages from the specified sender to the "AIMessage" class.
1. Access Chat DBโ
It's likely that your terminal is denied access to ~/Library/Messages
. To use this class, you can copy the DB to an accessible directory (e.g., Documents) and load from there. Alternatively (and not recommended), you can grant full disk access for your terminal emulator in System Settings > Security and Privacy > Full Disk Access.
We have created an example database you can use at this linked drive file.
# This uses some example data
import requests
def download_drive_file(url: str, output_path: str = "chat.db") -> None:
file_id = url.split("/")[-2]
download_url = f"https://drive.google.com/uc?export=download&id={file_id}"
response = requests.get(download_url)
if response.status_code != 200:
print("Failed to download the file.")
return
with open(output_path, "wb") as file:
file.write(response.content)
print(f"File {output_path} downloaded.")
url = (
"https://drive.google.com/file/d/1NebNKqTA2NXApCmeH6mu0unJD2tANZzo/view?usp=sharing"
)
# Download file to chat.db
download_drive_file(url)
File chat.db downloaded.
2. Create the Chat Loaderโ
Provide the loader with the file path to the zip directory. You can optionally specify the user id that maps to an ai message as well an configure whether to merge message runs.
from langchain_community.chat_loaders.imessage import IMessageChatLoader
loader = IMessageChatLoader(
path="./chat.db",
)