Skip to content

Commit f249223

Browse files
committed
refactor: use ULIDs instead of uuids
1 parent 7bd0eb9 commit f249223

File tree

6 files changed

+25
-9
lines changed

6 files changed

+25
-9
lines changed

langgraph/store/redis/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import asyncio
66
import json
77
import math
8-
import uuid
98
from contextlib import contextmanager
109
from datetime import datetime, timezone
1110
from typing import Any, Iterable, Iterator, Optional, Sequence, cast
@@ -14,6 +13,7 @@
1413
from redisvl.query import FilterQuery, VectorQuery
1514
from redisvl.redis.connection import RedisConnectionFactory
1615
from redisvl.utils.token_escaper import TokenEscaper
16+
from ulid import ULID
1717

1818
from langgraph.store.base import (
1919
BaseStore,
@@ -223,7 +223,7 @@ def _batch_put_ops(
223223
# Generate IDs for PUT operations
224224
for _, op in put_ops:
225225
if op.value is not None:
226-
generated_doc_id = uuid.uuid4().hex
226+
generated_doc_id = str(ULID())
227227
namespace = _namespace_to_text(op.namespace)
228228
doc_ids[(namespace, op.key)] = generated_doc_id
229229

langgraph/store/redis/aio.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import asyncio
44
import json
5-
import uuid
65
import weakref
76
from contextlib import asynccontextmanager
87
from datetime import datetime, timezone
@@ -13,6 +12,7 @@
1312
from redisvl.query import FilterQuery, VectorQuery
1413
from redisvl.redis.connection import RedisConnectionFactory
1514
from redisvl.utils.token_escaper import TokenEscaper
15+
from ulid import ULID
1616

1717
from langgraph.store.base import (
1818
BaseStore,
@@ -398,7 +398,7 @@ async def _batch_put_ops(
398398
# Generate IDs for PUT operations
399399
for _, op in put_ops:
400400
if op.value is not None:
401-
generated_doc_id = uuid.uuid4().hex
401+
generated_doc_id = str(ULID())
402402
namespace = _namespace_to_text(op.namespace)
403403
doc_ids[(namespace, op.key)] = generated_doc_id
404404

poetry.lock

Lines changed: 16 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ python = ">=3.9,<3.13"
1313
langgraph-checkpoint = "^2.0.10"
1414
redisvl = "^0.3.7"
1515
redis = "^5.2.1"
16+
python-ulid = "^3.0.0"
1617

1718
[tool.poetry.group.dev.dependencies]
1819
ruff = "^0.6.2"

tests/test_async_store.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"""Tests for AsyncRedisStore."""
22

3-
import uuid
43
from typing import Any, AsyncGenerator, Dict, Sequence, cast
54

65
import pytest
@@ -9,6 +8,7 @@
98
from langchain_core.runnables import RunnableConfig
109
from langchain_openai import OpenAIEmbeddings
1110
from redis.asyncio import Redis
11+
from ulid import ULID
1212

1313
from langgraph.checkpoint.redis import AsyncRedisSaver
1414
from langgraph.constants import START
@@ -525,7 +525,7 @@ def call_model(
525525
# Store new memories if the user asks the model to remember
526526
if "remember" in last_message.content.lower(): # type:ignore[union-attr]
527527
memory = "User name is Bob"
528-
store.put(namespace, str(uuid.uuid4()), {"data": memory})
528+
store.put(namespace, str(ULID()), {"data": memory})
529529

530530
messages = [{"role": "system", "content": system_msg}]
531531
messages.extend([msg.model_dump() for msg in state["messages"]])

tests/test_store.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import uuid
21
from typing import Any, Dict, Sequence, cast
32

43
import pytest
@@ -7,6 +6,7 @@
76
from langchain_core.runnables import RunnableConfig
87
from langchain_openai import OpenAIEmbeddings
98
from redis import Redis
9+
from ulid import ULID
1010

1111
from langgraph.checkpoint.redis import RedisSaver
1212
from langgraph.graph import START, MessagesState, StateGraph
@@ -464,7 +464,7 @@ def call_model(
464464
# Store new memories if the user asks the model to remember
465465
if "remember" in last_message.content.lower(): # type:ignore[union-attr]
466466
memory = "User name is Bob"
467-
store.put(namespace, str(uuid.uuid4()), {"data": memory})
467+
store.put(namespace, str(ULID()), {"data": memory})
468468

469469
messages = [{"role": "system", "content": system_msg}]
470470
messages.extend([msg.model_dump() for msg in state["messages"]])

0 commit comments

Comments
 (0)