Spaces:
Runtime error
Runtime error
"""In memory store that is not thread safe and has no eviction policy. | |
This is a simple implementation of the BaseStore using a dictionary that is useful | |
primarily for unit testing purposes. | |
""" | |
from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple | |
from langchain_core.stores import BaseStore | |
class InMemoryStore(BaseStore[str, Any]): | |
"""In-memory implementation of the BaseStore using a dictionary. | |
Attributes: | |
store (Dict[str, Any]): The underlying dictionary that stores | |
the key-value pairs. | |
Examples: | |
.. code-block:: python | |
from langchain.storage import InMemoryStore | |
store = InMemoryStore() | |
store.mset([('key1', 'value1'), ('key2', 'value2')]) | |
store.mget(['key1', 'key2']) | |
# ['value1', 'value2'] | |
store.mdelete(['key1']) | |
list(store.yield_keys()) | |
# ['key2'] | |
list(store.yield_keys(prefix='k')) | |
# ['key2'] | |
""" | |
def __init__(self) -> None: | |
"""Initialize an empty store.""" | |
self.store: Dict[str, Any] = {} | |
def mget(self, keys: Sequence[str]) -> List[Optional[Any]]: | |
"""Get the values associated with the given keys. | |
Args: | |
keys (Sequence[str]): A sequence of keys. | |
Returns: | |
A sequence of optional values associated with the keys. | |
If a key is not found, the corresponding value will be None. | |
""" | |
return [self.store.get(key) for key in keys] | |
def mset(self, key_value_pairs: Sequence[Tuple[str, Any]]) -> None: | |
"""Set the values for the given keys. | |
Args: | |
key_value_pairs (Sequence[Tuple[str, V]]): A sequence of key-value pairs. | |
Returns: | |
None | |
""" | |
for key, value in key_value_pairs: | |
self.store[key] = value | |
def mdelete(self, keys: Sequence[str]) -> None: | |
"""Delete the given keys and their associated values. | |
Args: | |
keys (Sequence[str]): A sequence of keys to delete. | |
""" | |
for key in keys: | |
self.store.pop(key, None) | |
def yield_keys(self, prefix: Optional[str] = None) -> Iterator[str]: | |
"""Get an iterator over keys that match the given prefix. | |
Args: | |
prefix (str, optional): The prefix to match. Defaults to None. | |
Returns: | |
Iterator[str]: An iterator over keys that match the given prefix. | |
""" | |
if prefix is None: | |
yield from self.store.keys() | |
else: | |
for key in self.store.keys(): | |
if key.startswith(prefix): | |
yield key | |