mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-09-28 04:25:08 +02:00
ci: migrate to uv! (#4698)
* Migrate to `uv` * Format `pyproject.toml` files properly * Remove upper bounds on dependencies, and bounds on dev dependencies (we should be using latest) * Move to hatch for packaing In the future we should: * Set up dependabot / automate lockfile updates and tests * Add tests for min compatible versions (I'll do this right after merge) * Use dynamic versioning * Bump `pydantic` to v2.11.4 in the lockfile, we have some tests failing
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
import random
|
||||
import sqlite3
|
||||
import threading
|
||||
from collections.abc import AsyncIterator, Iterator, Sequence
|
||||
from contextlib import closing, contextmanager
|
||||
from typing import Any, AsyncIterator, Dict, Iterator, Optional, Sequence, Tuple
|
||||
from typing import Any, Optional, cast
|
||||
|
||||
from langchain_core.runnables import RunnableConfig
|
||||
|
||||
@@ -261,7 +262,12 @@ class SqliteSaver(BaseCheckpointSaver[str]):
|
||||
return CheckpointTuple(
|
||||
config,
|
||||
self.serde.loads_typed((type, checkpoint)),
|
||||
self.jsonplus_serde.loads(metadata) if metadata is not None else {},
|
||||
cast(
|
||||
CheckpointMetadata,
|
||||
self.jsonplus_serde.loads(metadata)
|
||||
if metadata is not None
|
||||
else {},
|
||||
),
|
||||
(
|
||||
{
|
||||
"configurable": {
|
||||
@@ -283,7 +289,7 @@ class SqliteSaver(BaseCheckpointSaver[str]):
|
||||
self,
|
||||
config: Optional[RunnableConfig],
|
||||
*,
|
||||
filter: Optional[Dict[str, Any]] = None,
|
||||
filter: Optional[dict[str, Any]] = None,
|
||||
before: Optional[RunnableConfig] = None,
|
||||
limit: Optional[int] = None,
|
||||
) -> Iterator[CheckpointTuple]:
|
||||
@@ -349,7 +355,12 @@ class SqliteSaver(BaseCheckpointSaver[str]):
|
||||
}
|
||||
},
|
||||
self.serde.loads_typed((type, checkpoint)),
|
||||
self.jsonplus_serde.loads(metadata) if metadata is not None else {},
|
||||
cast(
|
||||
CheckpointMetadata,
|
||||
self.jsonplus_serde.loads(metadata)
|
||||
if metadata is not None
|
||||
else {},
|
||||
),
|
||||
(
|
||||
{
|
||||
"configurable": {
|
||||
@@ -428,7 +439,7 @@ class SqliteSaver(BaseCheckpointSaver[str]):
|
||||
def put_writes(
|
||||
self,
|
||||
config: RunnableConfig,
|
||||
writes: Sequence[Tuple[str, Any]],
|
||||
writes: Sequence[tuple[str, Any]],
|
||||
task_id: str,
|
||||
task_path: str = "",
|
||||
) -> None:
|
||||
@@ -496,7 +507,7 @@ class SqliteSaver(BaseCheckpointSaver[str]):
|
||||
self,
|
||||
config: Optional[RunnableConfig],
|
||||
*,
|
||||
filter: Optional[Dict[str, Any]] = None,
|
||||
filter: Optional[dict[str, Any]] = None,
|
||||
before: Optional[RunnableConfig] = None,
|
||||
limit: Optional[int] = None,
|
||||
) -> AsyncIterator[CheckpointTuple]:
|
||||
|
||||
@@ -2,7 +2,7 @@ import asyncio
|
||||
import random
|
||||
from collections.abc import AsyncIterator, Iterator, Sequence
|
||||
from contextlib import asynccontextmanager
|
||||
from typing import Any, Callable, Optional, TypeVar
|
||||
from typing import Any, Callable, Optional, TypeVar, cast
|
||||
|
||||
import aiosqlite
|
||||
from langchain_core.runnables import RunnableConfig
|
||||
@@ -374,7 +374,12 @@ class AsyncSqliteSaver(BaseCheckpointSaver[str]):
|
||||
return CheckpointTuple(
|
||||
config,
|
||||
self.serde.loads_typed((type, checkpoint)),
|
||||
self.jsonplus_serde.loads(metadata) if metadata is not None else {},
|
||||
cast(
|
||||
CheckpointMetadata,
|
||||
self.jsonplus_serde.loads(metadata)
|
||||
if metadata is not None
|
||||
else {},
|
||||
),
|
||||
(
|
||||
{
|
||||
"configurable": {
|
||||
@@ -449,7 +454,12 @@ class AsyncSqliteSaver(BaseCheckpointSaver[str]):
|
||||
}
|
||||
},
|
||||
self.serde.loads_typed((type, checkpoint)),
|
||||
self.jsonplus_serde.loads(metadata) if metadata is not None else {},
|
||||
cast(
|
||||
CheckpointMetadata,
|
||||
self.jsonplus_serde.loads(metadata)
|
||||
if metadata is not None
|
||||
else {},
|
||||
),
|
||||
(
|
||||
{
|
||||
"configurable": {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import json
|
||||
from typing import Any, Dict, Optional, Sequence, Tuple
|
||||
from collections.abc import Sequence
|
||||
from typing import Any, Optional
|
||||
|
||||
from langchain_core.runnables import RunnableConfig
|
||||
|
||||
@@ -7,8 +8,8 @@ from langgraph.checkpoint.base import get_checkpoint_id
|
||||
|
||||
|
||||
def _metadata_predicate(
|
||||
metadata_filter: Dict[str, Any],
|
||||
) -> Tuple[Sequence[str], Sequence[Any]]:
|
||||
metadata_filter: dict[str, Any],
|
||||
) -> tuple[Sequence[str], Sequence[Any]]:
|
||||
"""Return WHERE clause predicates for (a)search() given metadata filter.
|
||||
|
||||
This method returns a tuple of a string and a tuple of values. The string
|
||||
@@ -17,7 +18,7 @@ def _metadata_predicate(
|
||||
for each of the corresponding parameters.
|
||||
"""
|
||||
|
||||
def _where_value(query_value: Any) -> Tuple[str, Any]:
|
||||
def _where_value(query_value: Any) -> tuple[str, Any]:
|
||||
"""Return tuple of operator and value for WHERE clause predicate."""
|
||||
if query_value is None:
|
||||
return ("IS ?", None)
|
||||
@@ -52,9 +53,9 @@ def _metadata_predicate(
|
||||
|
||||
def search_where(
|
||||
config: Optional[RunnableConfig],
|
||||
filter: Optional[Dict[str, Any]],
|
||||
filter: Optional[dict[str, Any]],
|
||||
before: Optional[RunnableConfig] = None,
|
||||
) -> Tuple[str, Sequence[Any]]:
|
||||
) -> tuple[str, Sequence[Any]]:
|
||||
"""Return WHERE clause predicates for (a)search() given metadata filter
|
||||
and `before` config.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user