mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-08-28 18:59:42 +02:00
(RFC) add support for deleting messages
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import uuid
|
||||
from typing import Annotated, TypedDict, Union
|
||||
from typing import Annotated, Literal, TypedDict, Union
|
||||
|
||||
from langchain_core.messages import (
|
||||
AnyMessage,
|
||||
@@ -7,12 +7,21 @@ from langchain_core.messages import (
|
||||
convert_to_messages,
|
||||
message_chunk_to_message,
|
||||
)
|
||||
from langchain_core.messages.base import BaseMessage
|
||||
|
||||
from langgraph.graph.state import StateGraph
|
||||
|
||||
Messages = Union[list[MessageLikeRepresentation], MessageLikeRepresentation]
|
||||
|
||||
|
||||
class DeleteMessage(BaseMessage):
|
||||
id: str
|
||||
type: Literal["delete"] = "delete"
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
return super().__init__("delete-message", **kwargs)
|
||||
|
||||
|
||||
def add_messages(left: Messages, right: Messages) -> Messages:
|
||||
"""Merges two lists of messages, updating existing messages by ID.
|
||||
|
||||
@@ -79,8 +88,16 @@ def add_messages(left: Messages, right: Messages) -> Messages:
|
||||
merged = left.copy()
|
||||
for m in right:
|
||||
if (existing_idx := left_idx_by_id.get(m.id)) is not None:
|
||||
merged[existing_idx] = m
|
||||
if isinstance(m, DeleteMessage):
|
||||
del merged[existing_idx]
|
||||
else:
|
||||
merged[existing_idx] = m
|
||||
else:
|
||||
if isinstance(m, DeleteMessage):
|
||||
raise ValueError(
|
||||
f"Attempting to delete a message with an ID that doesn't exist ('{m.id}')"
|
||||
)
|
||||
|
||||
merged.append(m)
|
||||
return merged
|
||||
|
||||
|
||||
Reference in New Issue
Block a user