MCPcopy Index your code
hub / github.com/google/adk-python / InMemoryMemoryService

Class InMemoryMemoryService

src/google/adk/memory/in_memory_memory_service.py:45–134  ·  view source on GitHub ↗

An in-memory memory service for prototyping purpose only. Uses keyword matching instead of semantic search. This class is thread-safe, however, it should be used for testing and development only.

Source from the content-addressed store, hash-verified

43
44
45class InMemoryMemoryService(BaseMemoryService):
46 """An in-memory memory service for prototyping purpose only.
47
48 Uses keyword matching instead of semantic search.
49
50 This class is thread-safe, however, it should be used for testing and
51 development only.
52 """
53
54 def __init__(self):
55 self._lock = threading.Lock()
56
57 self._session_events: dict[str, dict[str, list[Event]]] = {}
58 """Keys are "{app_name}/{user_id}". Values are dicts of session_id to
59 session event lists.
60 """
61
62 @override
63 async def add_session_to_memory(self, session: Session) -> None:
64 user_key = _user_key(session.app_name, session.user_id)
65
66 with self._lock:
67 self._session_events[user_key] = self._session_events.get(user_key, {})
68 self._session_events[user_key][session.id] = [
69 event
70 for event in session.events
71 if event.content and event.content.parts
72 ]
73
74 @override
75 async def add_events_to_memory(
76 self,
77 *,
78 app_name: str,
79 user_id: str,
80 events: Sequence[Event],
81 session_id: str | None = None,
82 custom_metadata: Mapping[str, object] | None = None,
83 ) -> None:
84 _ = custom_metadata
85 user_key = _user_key(app_name, user_id)
86 scoped_session_id = session_id or _UNKNOWN_SESSION_ID
87 events_to_add = [
88 event for event in events if event.content and event.content.parts
89 ]
90
91 with self._lock:
92 self._session_events[user_key] = self._session_events.get(user_key, {})
93 existing_events = self._session_events[user_key].get(
94 scoped_session_id, []
95 )
96 existing_ids = {event.id for event in existing_events}
97 for event in events_to_add:
98 if event.id not in existing_ids:
99 existing_events.append(event)
100 existing_ids.add(event.id)
101 self._session_events[user_key][scoped_session_id] = existing_events
102

Calls

no outgoing calls